正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数

Posted

技术标签:

【中文标题】正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数【英文标题】:Proper way to count the exact no. of rows in SQL using PHP PDO 【发布时间】:2018-06-07 09:12:29 【问题描述】:

我想计算确切的数字。我的表中的行数,这就是我正在做的事情。如果我在性能方面犯了任何错误,请告诉我。

老办法

//I'm doing this to verify if the entered User name is correct.

$stmt = $conn->prepare("SELECT * FROM `users` WHERE `User` = ?");
$stmt->execute(array($user));
$Count = $stmt->rowCount();
echo $Count;

在某些站点中,我读到SELECT * 的使用存在一些性能问题,因此如果不需要所有列,则应避免使用,因此我已更改为

$stmt = $conn->prepare("SELECT `id` FROM `users` WHERE `User` = ?");
$stmt->execute(array($user));
$Count = $stmt->rowCount();
echo $Count;

我曾想过使用 mysql 函数 COUNT(),但我不确定它是否会提高几百万行和大约 8-9 列的表的性能。

$stmt = $conn->prepare("SELECT COUNT(`id`) FROM `users` WHERE `User` = ?");
$stmt->execute(array($user));
for($stmt as $row)
    $Count = $row[0];
echo $Count;

我应该使用以上哪一种,或者还有其他更好的方法吗?

【问题讨论】:

MySQL: Fastest way to count number of rows的可能重复 @NigelRen - 是的,是重复的,但问答中充斥着错误陈述,很难找出真相。 【参考方案1】:

使用COUNT(*) 比获取所有行然后计数更有效。

所以你应该使用:

$stmt = $conn->prepare("SELECT COUNT(`id`) FROM `users` WHERE `User` = ?");
$stmt->execute(array($user));
$count = $stmt->fetchColumn();
echo $Count;

阅读更多关于fetchColumn

【讨论】:

添加某种形式的解释说明为什么他们应该使用这种方法会很有用。 谢谢,它成功了。如果我只使用$count = $stmt->fetch() 怎么样?参考:php.net/manual/en/pdostatement.rowcount.php#107055 $count = $stmt->fetch(),需要算$count = $count[0]; 是的。在这种情况下,fetchColumn() 运行良好,但在fetchColumn() php.net/manual/en/… 中发现了一个限制。正如您所提到的,不要获取所有行,所以我用fetch() 替换了一些foreach 循环,其中需要单行的多个列值。如果我做错了,请通过替换 foreach 循环告诉我。 如果您需要多个/所有记录,则使用$stmt->fetchAll(),将返回记录数组并使用foreach。对于单行,使用$stmt->fetch(),将返回单条记录。对于单列使用$stmt->fetchColumn(),将只返回第一列,如count

以上是关于正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中

在 PHP 中通过 ODBC(使用 PDO)查询雪花返回不正确的数据

如何正确使用 PDO 对象进行参数化 SELECT 查询

PHP PDO 没有从 .mdb 表返回正确的数据

如何使用 PHP 和 PDO 计算 MySQL 表中行子集的大小(以字节为单位)?

php课程---php使用PDO方法详解(转)