使用mysqli,我可以使用mysqli_num_rows从select查询中获取行数。我无法找到使用PDO执行此操作的方法,而无需执行SELECT COUNT(*)
之类的单独查询?当我已有记录集时,我没有看到单独查询的重点。
答案 0 :(得分:5)
您可以使用SQL_CALC_FOUND_ROWS
作为记录here。例如:
$result = $db->prepare("SELECT SQL_CALC_FOUND_ROWS id, name FROM fruit WHERE calories > 100");
$result->execute();
$result = $db->prepare("SELECT FOUND_ROWS()");
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;
此选项通常用于在您拥有LIMIT
子句时获取完全匹配计数,但是,如果没有一个子句它可以正常工作,并且它比使用{{1}再次发出相同查询更有效因为它只检索第一个查询值存储的计数值,而不必运行另一个完整的查询。
答案 1 :(得分:0)
在Pdo中,您使用rowCount
。示例:$string-> rowCount ();
答案 2 :(得分:0)
试试这个:
$sql = "SELECT count(id) FROM `table` WHERE condition";
$result = $db->prepare($sql);
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;
答案 3 :(得分:0)
RTM:http://php.net/manual/en/pdostatement.rowcount.php
对于大多数数据库,
PDOStatement::rowCount()
不会返回 受SELECT语句影响的行数。而是使用 PDO :: query()发出带有相同的SELECT COUNT(*)语句 将谓词作为预期的SELECT语句,然后使用 PDOStatement :: fetchColumn()来检索将要的行数 被退回然后,您的应用程序可以执行正确的操作。
$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {
/* Check the number of rows that match the SELECT statement */
if ($res->fetchColumn() > 0) {
/* .... */
我不想复制整个PHP.net页面,请阅读它。
为什么PDO没有num_rows
?
您可能认为有2个查询的速度较慢但不是。 PDO是几个数据库系统的通用客户端库,而不仅仅是MySQL。出于性能原因,并非everys数据库系统具有内部,技术能力来计算查询中选择的总行数。知道总行数需要在提供行之前检查所有行。