Вопрос по function, php, pdo – Функция PDO setFetchMode

0

Здравствуйте, я пытался сделать функцию с 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;
}

я хочу посчитать строку ОТ, и вот выход, который я пытался

$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

пожалуйста, помогите спасибо

Вы также можете сделатьvar_dump($STH->errorInfo()); чтобы получить любые ошибки SQL ContextSwitch
у меня есть столбец с именем ОТ Harinder
FROM - это ключевое слово в SQL. Вы должны обернуть его в отметки в ваших операторах SQL при описании вашего столбца. Quantastical
Возможно, в вашем операторе SQL есть ошибка? Я не знаю, есть ли у вас столбец с именем & quot; (Т.е.count(from)). Возможно, вам придется завернуть его в отметки или что-то в этом роде. Quantastical

Ваш Ответ

1   ответ
1

Вам нужно проверить возвращаемое значениеPDO::query(), В (некрасивом) PHP есть много функций, которые возвращают значение смешанного типа. В случаеPDO::query() тип возврата либоPDOStatement или bool, хотя прототип в документации говорит что-то другое:

Description:
PDOStatement PDO::query ( string $statement )
...

Похоже, он всегда возвращаетсяPDOStatement.

Return Values:
PDO::query() returns a PDOStatement object, or FALSE on failure.

Ой, не в каждом случае! Поэтому вам не гарантируется, что возвращаемое значениеPDOStatement.

Правильный прототип будет:

Description:
mixed PDO::query ( string $statement )
...

В вашем случае запрос недопустим (с использованием зарезервированного ключевого слова, такого как FROM, в качестве имени столбца), что приводит к возвращаемому значению типа boolean со значением FALSE. Логическое значение не является объектом и, следовательно, ваш вызов$STH->setFetchMode() выходит из строя.

В зависимости от вашего PDO :: ATTR_ERRMODE вы получаете

an exception (PDO::ERRMODE_EXCEPTION), so you don't need to check the return value a warning (PDO::ERRMODE_WARNING) nothing (PDO::ERRMODE_SILENT), so you have to check the return value, errorCode() and errorInfo()

Похожие вопросы