Ошибка PDO: $ pdo-> prepare () -> execute () выдает ошибку «Вызов функции-члена fetch () для логического значения») - PullRequest
0 голосов
/ 23 марта 2020

Если мой запрос pdo, например:

$sql=$pdo->prepare('select timezone from wo_users where user_id=?')->execute(array($wo['user']['user_id']));
while($row=$sql->fetch()){var_dump($row);die;}

выдаст ошибку:

(!) Неустранимая ошибка: вызов функции-члена fetch () для логического значения в C: \ wamp64 \ www\community.voyance \ 2 \ sources \ calendar. php в строке 27

Но если мой запрос pdo, использующий query () напрямую, не выдаст ошибку:

$sql=$pdo->query('select timezone from wo_users where user_id=1;');
while($row=$sql->fetch()){var_dump($row);die;}

C: \ wamp64 \ www\community.voyance \ 2 \ sources \ calendar. php: 27: массив (размер = 1) 'часовой пояс' => строка '-8' (длина = 2)

Почему это происходит? Спасибо!

1 Ответ

1 голос
/ 23 марта 2020

Вам нужно PDOStatement для извлечения, execute возвращает только true или false. Вы должны только execute PDOStatement. Это вернет вам объект результата, который вы можете fetch, или ошибку. Об обработке ошибок PDO см. Мой оператор PDO не работает .

$stmt = $pdo->prepare('select timezone from wo_users where user_id=?');
$stmt->execute(array($wo['user']['user_id']));
while($row = $stmt->fetch()){
     var_dump($row);
     die;
}

Как видно из руководства, запрос работает, потому что:

PDO :: query () возвращает объект PDOStatement или FALSE при ошибке.

, где execute :

Возвращает TRUE в случае успеха или FALSE в случае ошибки.

prepare - это то, что нам нужно:

Если сервер базы данных успешно готовит инструкцию, PDO :: prepare () возвращает объект PDOStatement. Если сервер базы данных не может успешно подготовить оператор, PDO :: prepare () возвращает FALSE или выдает исключение PDOException (в зависимости от обработки ошибок).

и fetch (это описание, а не возврат):

Извлекает строку из результирующего набора, связанного с объектом PDOStatement

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...