正确计算确切编号的方法。使用 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)查询雪花返回不正确的数据