PDO函数集获取模式


PDO Function setFetchMode

您好,我试图使用 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

请帮忙谢谢

您需要检查 PDO::query() 的返回值。在(丑陋的)PHP中,有很多函数返回混合类型的值。在PDO::query()的情况下,返回类型为 PDOStatement 或 bool,尽管文档中的原型说了一些不同的东西:

描述:
PDOStatement PDO::query ( string $statement ) ...

看起来它总是返回PDOStatement.

返回值:
PDO::query() 返回一个 PDOStatement 对象,或在失败时返回 FALSE.

哎呀,不是在所有情况下!因此,不能保证返回的值是PDOStatement

正确的原型是:

描述:
mixed PDO::query ( string $statement ) ...

在您的情况下,查询无效(通过使用保留关键字(如 FROM)作为列名),这会导致返回值为 FALSE 的布尔类型返回值。布尔值不是对象,因此对$STH->setFetchMode()的调用失败。

根据您的 PDO::ATTR_ERRMODE 你会得到

  • 异常 (PDO::ERRMODE_EXCEPTION),因此您无需检查返回值
  • 警告 (PDO::ERRMODE_WARNING)
  • 什么都没有(PDO::ERRMODE_SILENT),所以你必须检查返回值,errorCode()errorInfo()