Php PDO函数setFetchMode
您好,我试图使用PDO生成函数,但出现错误(PDO的新功能)这是我的代码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 = '
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()
count(from)
)。你可能需要用记号之类的东西把它包装起来。我有一个列,它的名字From是SQL中的一个关键字。在描述列时,您需要在SQL语句中用记号标记它。您还可以执行var_dump($STH->errorInfo())代码>以获取任何sql错误
Call to a member function setFetchMode() on a non-object