Php PDO函数setFetchMode

Php PDO函数setFetchMode,php,function,pdo,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 = '

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

请帮助thx

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

说明:
PDO语句PDO::查询(字符串$statement)

看起来它总是返回
PDOStatement

返回值:
PDO::query()返回PDOStatement对象,失败时返回FALSE。

哎呀,不是所有情况下都是这样!因此,不能保证返回的值是
pdo语句

正确的原型是:

说明:
混合PDO::查询(字符串$statement)

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

取决于您的PDO::ATTR_ERRMODE

  • 异常(PDO::ERRMODE_异常),因此不需要检查 返回值
  • 警告(PDO::ERRMODE_警告)
  • 无(PDO::ERRMODE_SILENT),因此您必须检查返回值,
    errorCode()
    errorInfo()

您的SQL语句可能有错误?我不知道您是否可以有一个名为“from”的列(即
count(from)
)。你可能需要用记号之类的东西把它包装起来。我有一个列,它的名字From是SQL中的一个关键字。在描述列时,您需要在SQL语句中用记号标记它。您还可以执行
var_dump($STH->errorInfo())以获取任何sql错误
Call to a member function setFetchMode() on a non-object