use*_*624 3 php mysql pdo prepared-statement
使用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();
Run Code Online (Sandbox Code Playgroud)
$ prep的对象转换:对象(PDOStatement)#2(1){["queryString"] => string(58)"从t_books中选择COUNT(*),其中标题LIKE:search_term"}
致命错误:在非对象上调用成员函数fetchColumn()
如果$ prep是一个对象,那么$ num应该是一个对象.但它是布尔值(true).这里发生了什么?
但更重要的是,我该如何计算呢?
我用PDO阅读行计数 - .那些建议对我不起作用,因为我需要准备好的声明.会有用户输入.
谢谢你的帮助.
PDOStatement::execute()只返回一个表示成功或失败的布尔值,因此您的变量$num不是您想要获取的变量.通过将结果分配给$num,您不是分配对象$prep,而是仅分配方法调用execute()(TRUE)的返回值.
相反,fetchColumn()来自$prep您的PDOStatement对象.
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
if ($num) {
$total = $prep->fetchColumn();
}
Run Code Online (Sandbox Code Playgroud)
除此之外,您的SQL应该正确执行,它返回的一列应该包含您需要的计数.
在这种情况下(特别是因为你fetchColumn()没有参数调用)并不重要,但对于未来的读者,建议COUNT()使用别名命名聚合,然后可以在关联或对象提取中使用:
$sql = 'SELECT COUNT(*) AS num_books from t_books where title LIKE :search_term';
// Later access as num_books
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |