mikolas
5.07.2017 - 21:42
Добрый день есть скрипт который запускается cron. и бывает такое что скрипт возвращает ошибки. как можно сделать условие на ошибку. Например мне вернуло ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
или вот PHP Notice: Undefined offset: 501
или PHP Warning:
как сделать условие если есть ошибка print_r($array); в $array хранятся исходные данные по которым можно исправить ошибку. Спасибо
walerus
5.07.2017 - 22:43
По правильному, перед установкой заданий на крон, скрипт должен быть проверен и оттестирован, иначе и сервер повесить можно так, что он и "ошибки" забудет какие писать.
Ошибки бывают разного рода, по этому "универсального" метода не придумать.
killer8080
5.07.2017 - 22:45
mikolasесть разные варианты, можно включить лог ошибок в PHP и указать лог файл, можно навешать кастомный обработчик ошибок
set_error_handler, ну и самый простой вариант - перенаправить STDERR в файл, прямо в команде запускаемой кроном.
/usr/bin/php -f /your/script.php 2 >> /var/log/cron_job_error.log
можно и STDOUT направить туда же, если хочешь при ошибке выводить текст через echo.
постарайтесь написать/изменить скрипт так что бы
а) В скрипте были учтены все возможные ошибки.
б) Если нужно, собрать их(ошибки) в кучу и скажем отправить на мыло.
- You have an error in your SQL syntax;
тут возможно стоит какой-то перебор массива, а данных нет.
- PHP Notice
Обращение к данным переменной, которая не объявлена
- PHP Warning
тут все что угодно может быть.
Если вы не разбираетесь в PHP (а это так), то никак. Точнее ошибки будут, но что это конкретно, без скрипта не разобраться.
killer8080
5.07.2017 - 22:58
Цитата (Kusss @ 5.07.2017 - 22:49) |
а) Чтобы в скрипте были учтены все возможные ошибки. |
Всего не учтешь, особенно то что от тебя не зависит, например падение БД.
Естественно синтаксические и логические ошибки нужно дебажить до выкладки в прод.
mikolas
5.07.2017 - 23:17
проблема в том что я не знаю какие данные приходят и иногда исключения попадаются, вот что поймешь из ошибки
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1. да я знаю что это ошибка произошла, но из-за какого неучтенного мной данного.
А у меня все ошибки cron на почту приходят, я конечно могу на почту кинуть сразу и выводить данные но это столько данных у меня в минуту 60 запросов к разным источникам, а ошибок две в день вылетает. Ладно буду выводить все данные наверное.
mikolas
5.07.2017 - 23:24
я имею ввиду 2 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
а вот PHP Warning: Error while sending QUERY packet. очень часто менял max_allowed_packet=1М на max_allowed_packet=10М все равно ошибки остались
mikolas
Ваши ошибки, по крайней мере первые две, нужно учитывать в скрипте.
А не продолжать работать с неверными(пустыми) данными дальше.
mikolas
5.07.2017 - 23:31
- PHP Notice это я примерно знаю что и найду, там хоть строчка указана))) уже завтра
$sql = "SELECT * FROM `order` WHERE date > ( NOW() - INTERVAL 12 HOUR )";
$order[] = $value['id'];
$sql = "SELECT * FROM `table` WHERE order_id IN (". implode(',', $order) .") ";
Вот примерно такой код(он не рабочий, это образно) приведет и к Нотису и SQL syntax. Если заказов не будет.
Потому что нет проверок
mikolas
5.07.2017 - 23:42
Да я понимаю почему допустим у меня 4 данных надо ввести а у меня одного нет и получается один столбец без значения и это выдает ошибку, просто я хотел узнать как по быстрее найти, там данных реально много и они объединяются с каждым этапом, поэтому нужно все этапы выводить что бы знать на каком именно и все будет долго, а так если бы я словил ошибку на определенном этапе было бы легче. Спасибо большое
Цитата |
проблема в том что я не знаю какие данные приходят |
это что еще за новое веяние в программировании
валидация данных должна быть и это не обсуждается
_____________
Стимулятор ~yoomoney - 41001303250491
mikolas
6.07.2017 - 09:47
Цитата (Valick @ 6.07.2017 - 09:17) |
это что еще за новое веяние в программировании валидация данных должна быть и это не обсуждается |
То есть могу узнать, но этой ошибки до этого не было значит новые данные поступили какие-то и из-за них выходит ошибка.
killer8080
6.07.2017 - 12:49
Цитата (mikolas @ 6.07.2017 - 09:47) |
То есть могу узнать, но этой ошибки до этого не было значит новые данные поступили какие-то и из-за них выходит ошибка. |
как это? ты не знаешь требования к данным которые подставляешь в запрос?
Про необходимость валидации выше уже сказали.
mikolas
6.07.2017 - 14:19
Цитата (killer8080 @ 6.07.2017 - 12:49) |
как это? ты не знаешь требования к данным которые подставляешь в запрос? Про необходимость валидации выше уже сказали. |
Это парсинг данные могут меняться, не зависимо от меня, но я согласен что нужно проверок побольше добавить, но это не суть отловил ошибку SQL
Notice еще не вылетала. С утра уже сижу и знаете что самое странное пропали ошибки
PHP Warning: Error while sending QUERY packet А я всего навсего вывел на экран все данные, но их очень много. Почему так как это могло повлиять на работу Mysql. Ни одной ошибки нет, помогите понять.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.