PDO函数setFetchMode

时间:2012-05-22 19:42:26

标签: php function pdo

你好我试图用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

1 个答案:

答案 0 :(得分:1)

您需要检查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

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