【问题标题】:Proper way to count the exact no. of rows in SQL using PHP PDO正确计算确切编号的方法。使用 PHP PDO 的 SQL 中的行数
【发布时间】: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;

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

【问题讨论】:

标签: php mysql performance pdo query-performance


【解决方案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
猜你喜欢
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多