[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как сделать условие на ошибку
Страницы: 1, 2
mikolas
Добрый день есть скрипт который запускается 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
По правильному, перед установкой заданий на крон, скрипт должен быть проверен и оттестирован, иначе и сервер повесить можно так, что он и "ошибки" забудет какие писать.

Ошибки бывают разного рода, по этому "универсального" метода не придумать.
killer8080
mikolas
есть разные варианты, можно включить лог ошибок в PHP и указать лог файл, можно навешать кастомный обработчик ошибок set_error_handler, ну и самый простой вариант - перенаправить STDERR в файл, прямо в команде запускаемой кроном.
/usr/bin/php -f /your/script.php 2 >> /var/log/cron_job_error.log

можно и STDOUT направить туда же, если хочешь при ошибке выводить текст через echo.
Kusss
постарайтесь написать/изменить скрипт так что бы
а) В скрипте были учтены все возможные ошибки.
б) Если нужно, собрать их(ошибки) в кучу и скажем отправить на мыло.

- You have an error in your SQL syntax;
тут возможно стоит какой-то перебор массива, а данных нет.

- PHP Notice
Обращение к данным переменной, которая не объявлена

- PHP Warning
тут все что угодно может быть.

Если вы не разбираетесь в PHP (а это так), то никак. Точнее ошибки будут, но что это конкретно, без скрипта не разобраться.
killer8080
Цитата (Kusss @ 5.07.2017 - 22:49)
а) Чтобы в скрипте были учтены все возможные ошибки.

Всего не учтешь, особенно то что от тебя не зависит, например падение БД.
Естественно синтаксические и логические ошибки нужно дебажить до выкладки в прод. smile.gif
mikolas
проблема в том что я не знаю какие данные приходят и иногда исключения попадаются, вот что поймешь из ошибки
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
я имею ввиду 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М все равно ошибки остались
Kusss
mikolas
Ваши ошибки, по крайней мере первые две, нужно учитывать в скрипте.
А не продолжать работать с неверными(пустыми) данными дальше.
mikolas
- PHP Notice это я примерно знаю что и найду, там хоть строчка указана))) уже завтра
Kusss
// последние заказы за 12 часов
$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
Да я понимаю почему допустим у меня 4 данных надо ввести а у меня одного нет и получается один столбец без значения и это выдает ошибку, просто я хотел узнать как по быстрее найти, там данных реально много и они объединяются с каждым этапом, поэтому нужно все этапы выводить что бы знать на каком именно и все будет долго, а так если бы я словил ошибку на определенном этапе было бы легче. Спасибо большое
Valick
Цитата
проблема в том что я не знаю какие данные приходят

это что еще за новое веяние в программировании
валидация данных должна быть и это не обсуждается

_____________
Стимулятор ~yoomoney - 41001303250491
mikolas
Цитата (Valick @ 6.07.2017 - 09:17)

это что еще за новое веяние в программировании
валидация данных должна быть и это не обсуждается

То есть могу узнать, но этой ошибки до этого не было значит новые данные поступили какие-то и из-за них выходит ошибка.
killer8080
Цитата (mikolas @ 6.07.2017 - 09:47)
То есть могу узнать, но этой ошибки до этого не было значит новые данные поступили какие-то и из-за них выходит ошибка.

как это? ты не знаешь требования к данным которые подставляешь в запрос?
Про необходимость валидации выше уже сказали.
mikolas
Цитата (killer8080 @ 6.07.2017 - 12:49)
как это? ты не знаешь требования к данным которые подставляешь в запрос?
Про необходимость валидации выше уже сказали.

Это парсинг данные могут меняться, не зависимо от меня, но я согласен что нужно проверок побольше добавить, но это не суть отловил ошибку SQL
Notice еще не вылетала. С утра уже сижу и знаете что самое странное пропали ошибки
PHP Warning: Error while sending QUERY packet А я всего навсего вывел на экран все данные, но их очень много. Почему так как это могло повлиять на работу Mysql. Ни одной ошибки нет, помогите понять.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.