Здравствуйте, я пытался сделать функцию с PDO, но получить ошибку (новичок в PDO) вот мой код
function mail_id($mail){ global $host, $dbname, $user, $pass; $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $STH = $DBH->query("select count(from) from messages where from = '$mail'"); $STH->setFetchMode(PDO::FETCH_ASSOC); $row = $STH->fetch(); return $row; }
Я хочу, чтобы подсчитать строку FROM, и вот мой вопрос, который я пытался
$mail=mail_id($userid); if (0<count($mail['to_viewed'])) {echo "green";} else {echo "gray";}
это ошибка
Call to a member function setFetchMode() on a non-object
помогите thx
Вам нужно проверить возвращаемое значение PDO::query()
. В (уродливом) PHP есть много функций, возвращающих значение смешанного типа. В случае PDO::query()
тип возврата – это PDOStatement
или bool, хотя прототип в документации говорит что-то другое:
Описание:
PDOStatement PDO::query ( string $statement )
...
Похоже, он всегда возвращает PDOStatement
.
Возвращаемые значения:
PDO :: query () возвращает объект PDOStatement или FALSE при сбое.
Ой, не в каждом случае! Поэтому вам не гарантируется, что возвращаемое значение является PDOStatement
.
Правильный прототип:
Описание:
mixed PDO::query ( string $statement )
...
В вашем случае запрос недопустим (используя зарезервированное ключевое слово, например FROM, как имя столбца), что приводит к возвращаемому значению типа boolean со значением FALSE. Логическое значение не является объектом, и поэтому ваш вызов $STH->setFetchMode()
терпит неудачу.
В зависимости от вашего PDO :: ATTR_ERRMODE вы получаете
errorCode()
и errorInfo()