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

下一篇: PDO, Mysql and native prepared statements