PHP PDO Prepared Statement MySQL选择的地方X LIKE
使用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应该是一个对象。 但它是布尔(真)。 这里发生了什么?
但更重要的是,我该如何计数?
我用PDO读取行数 - 。 那里的建议不适合我,因为我需要一个准备好的声明。 将有用户输入。
谢谢你的帮助。
PDOStatement::execute()
只返回一个表示成功或失败的布尔值,所以你的变量$num
不是你想要从中获取的。 通过将结果分配给$num
,您不会分配对象$prep
,而只是调用execute()
( TRUE
)的方法的返回值。
相反,从$prep
,您的PDOStatement对象fetchColumn()
。
$num = $prep->execute(array(':search_term' => '%'.$search_term. '%'));
if ($num) {
$total = $prep->fetchColumn();
}
除此之外,您的SQL应该正确执行,并且它返回的一列应该包含您需要的计数。
在这种情况下(特别是因为您没有参数调用fetchColumn()
),这并不重要,但对于将来的读者,最好将COUNT()
聚合的名称命名为可用于关联或对象的别名取:
$sql = 'SELECT COUNT(*) AS num_books from t_books where title LIKE :search_term';
// Later access as num_books
链接地址: http://www.djcxy.com/p/66701.html
上一篇: PHP PDO Prepared Statement MySQL Count of Select where X LIKE