«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/11/02 12:02:10  №1288795 1
С пдо вобще не работал, а манул дочитал лишь до середины (Connections and Connection management). Решил, что потом дочитаю и начал делать. И вот присваиваю пременной значение ответа sql, а код выполняется не дожидаясь этого ответа, и на тесте на нулл выдает true. Выставил задержку в качетсве костыля, но она тоже не помогает, а ждать на каждом обращении более 0.15 сек не по барски. Что делать?
Ответы: >>1288805 >>1288827
Аноним 2018/11/02 12:25:07  №1288805 2
>>1288795

Минимальный пример кода в студию. Напиши, что он выводит, и что, по-твоему, должен вывести. Тогда я смогу глянуть и за 5-10 секунд понять, в чем дело. А по твоему описанию ничего не понять.
Ответы: >>1288813
Аноним 2018/11/02 13:04:36  №1288813 3
Ответы: >>1288820 >>1288822 >>1288824
Аноним 2018/11/02 13:33:27  №1288820 4
>>1288813

sleep надо убрать.

Также, зачем ты выставил ATTR_PERSISTENT? Попробуй без него. Или тебе надо именно с ним?

Также, включи выброс исключения при ошибке: http://php.net/manual/ru/pdo.setattribute.php ( PDO::ERRMODE_EXCEPTION: )

Также, включи отображение ошибок в php.ini (display_errors = 1), если оно не включено. Но не делай так на продакшене!

Я подозреваю, проблема в том, что ты почему-то не включил вывод ошибок (хотя во всех моих уроках написано, что надо его включать), происходит какая-то ошибка, но так как ты не включил их вывод, ты о ней не знаешь и придумываешь неправильные объяснения происходящему, ставишь sleep, хотя он ни на что не влияет итд.
Ответы: >>1288870
Аноним 2018/11/02 13:34:12  №1288822 5
>>1288813

Также, на будущее: минимальный пример лучше писать без использования класса, просто последовательность команд.
Ответы: >>1288870
Аноним 2018/11/02 13:36:30  №1288824 6
>>1288813

Также, вместо if ($ans == null) надо в примере писать var_dump($ans); Чтобы точно видеть, что возвращается, а не гадать.

У меня такое ощущение, что ты пропустил основы, и сразу берешься за сложные темы, в итоге путаешься. Это конечно не имеет отношения к багу, и это твое личное дело, но по моему это плохая идея, а на собеседовании это легко определить.
Ответы: >>1288870
Аноним 2018/11/02 13:39:32  №1288827 7
>>1288795

Твое объяснение неправильное. PDO работает синхронно, и его методы не возвращают управление, пока не получат ответ от БД или пока не будет обнаружена ошибка. Соответственно, от того, ставишь ты sleep или нет, ровным счетом ничего не зависит. Тем более, что ты его ставишь уже после выполнения взаимодействия с БД.
Аноним 2018/11/02 14:50:57  №1288870 8
>>1288820
>ATTR_PERSISTENT
Ну мне нужно минимизировать время, а запросов к базе много. Если есть альтернативы, то я буду не против. А вообще скорее всего перепишу все на prepare, без кривого класса.
>display_errors
Вроде все включено
>PDO::ERRMODE_EXCEPTION:
Он тоже вроде включен по умолчанию, но ошибки через try catch нет
>>1288824
Возвращает пустой массив, но если передвинуть на строчку вниз, то вернет все что запрашивал.
>>1288822
Ответы: >>1288882 >>1289076
Аноним 2018/11/02 15:12:32  №1288882 9
>>1288870
Хотя возможно это действительно не в pdo вина. Просто это выглядело достаточно странно, когда у меня ПК был под нагрузкой, то возвращался пустой массив, а если внутри if я убирал die, то программа после выполнялась вполне нормально.
Аноним 2018/11/02 20:31:20  №1289076 10
>>1288870

>>PDO::ERRMODE_EXCEPTION:
> Он тоже вроде включен по умолчанию, но ошибки через try catch нет

Нет, неверно. Где это написано? Я написал тебе - по умолчанию ошибки работы с базой данных никак не репортятся. Потому надо ставить эту опцию.

Прочитай внимательно мануал, что стоит по умолчанию: http://php.net/manual/ru/pdo.error-handling.php

Также, try/catch писать не надо. Почитай урок про исключения: https://github.com/codedokode/pasta/blob/master/php/exceptions.md