使用 PHP v. 5.2.14 和 PDO-MySQL 扩展。
我是准备好的陈述的新手。需要创建一个搜索表单(因此用户输入)和“选择所有 X,其中 X 喜欢……”品种的工作查询。
代码和结果:
$sql = 'SELECT COUNT(*) as num_books from t_books where title LIKE :search_term';
// Later access as num_books
$prep = $dbh->prepare($sql);
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
$total=$num->fetchColumn();
$prep 的 var 转储:
object(PDOStatement)#2 (1) { ["queryString"]=> string(58) "SELECT COUNT(*) from t_books where title LIKE :search_term"}
致命错误: 调用非对象 上的成员函数 fetchColumn()
如果 $prep 是一个对象,那么 $num 应该是一个对象。但它是 bool 值(真)。这里发生了什么?
但更重要的是,我如何进行计数?
我读过 Row count with PDO -。那里的建议对我不起作用,因为我需要准备好的声明。将有用户输入。
谢谢你的帮助。
最佳答案
PDOStatement::execute()
只返回一个指示成功或失败的 bool 值,因此您的变量 $num
不是您想要从中获取的。通过将结果分配给 $num
,您并没有分配对象 $prep
,而只是分配给 execute()
( TRUE
) 的方法调用的返回值。
相反, fetchColumn()
来自 $prep
,你的 PDOStatement 对象。
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
if ($num) {
$total = $prep->fetchColumn();
}
除此之外,您的 SQL 应该正确执行并且它返回的一列应该包含您需要的计数。
在这种情况下(特别是因为您不带参数调用
fetchColumn()
)这并不重要,但是对于 future 的读者,建议使用别名命名 COUNT()
聚合,然后可以在关联或对象提取中使用该别名:$sql = 'SELECT COUNT(*) AS num_books from t_books where title LIKE :search_term';
// Later access as num_books
关于PHP PDO Prepared Statement MySQL Count of Select where X LIKE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12080750/