你好我试图用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
答案 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
errorCode()
和errorInfo()