【问题标题】:How to debug php/MySQL COUNT(id) returning 1 instead of total entries value如何调试 php/MySQL COUNT(id) 返回 1 而不是总条目值
【发布时间】:2018-07-01 10:06:58
【问题描述】:

我需要数据库中的条目总数。

问题:为什么 "print_r($rows)" 行返回 "Array ( [COUNT(id)] => 79 )" 但随后 "$recordCount = Count($row); echo "
记录计数 = " . $recordCount;"返回“记录数 = 1”。

我已经尝试了大量不同版本的这段代码,但我无法在这里全部输入,否则将需要很长时间才能阅读。这是代码的当前版本,这给了我上面提到的意外结果:

// create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// check connection
if ($conn->connect_error) {
die("connection failed: " . $conn->connect_error);
}


$sql = "SELECT * FROM games ORDER BY id DESC LIMIT $startRow, $rowsPerPage";
$result = $conn->query($sql);

$sql = "SELECT COUNT(id) FROM games";
$results = $conn->query($sql);
$row = $results->fetch_assoc();
print_r($row);
$recordCount = Count($row);
echo "<br/> record count = " . $recordCount;



$totalPages = ceil($recordCount / $rowsPerPage);
$pagination = "<div class='pagination'>";

for ($i = 0; $i <= $totalPages; $i++) {
  $pagination .= "<a href='index.php?page=" . $i . "'>" . $i . "</a>";
  echo 'wtf!';
}

$pagination .= "</div>";
echo ' <br/> pagination = ' . $pagination;

感谢各位英雄,我现在已经正确了:这里以防 2018 年的其他人在网上阅读并发现许多不正确的实现:

 $sql = "SELECT COUNT(id) as countid FROM games";
$results = $conn->query($sql);
$row = $results->fetch_assoc();

$recordCount = $row["countid"]; // the countid gives me the total i expected :DDDD
echo "<br/> record count = " . $recordCount;

【问题讨论】:

  • 发布表结构SHOW CREATE TABLE games
  • Count($row) 是返回的行数——不是行的内容,试试echo $row["COUNT(id)"];
  • $row 是一个仅包含 1 个值的数组,即 [COUNT(id)] =&gt; 79。我建议您将查询更改为SELECT COUNT(id) total_games FROM games 之类的内容,然后使用echo $row['total_games']; 访问结果
  • 在查询中使用别名更容易。COUNT(id) as id_count 在 PHP 中使用 $row['id_count']。在 PHP @NigelRen 中使用 $row["COUNT(id)"]; 有点棘手
  • 啊,好吧,我想我明白了:DD ...我也尝试过使用别名,但是当我运行它时说“数组索引无效”

标签: php mysql sql mysqli pagination


【解决方案1】:

row 是一个关联数组,结果集中的每一列都有一个条目。由于那里只有一列,count($row) 返回1。相反,您应该只访问那里的唯一列:

$row = $results->fetch_assoc();
$recordCount = $row["COUNT(id)"];

【讨论】:

  • 了不起的人谢谢你。多年来,我一直在围绕着那片灌木丛摆弄,我几乎得到了它。作为旁注,这个答案有点错误。我将调整我的问题以显示答案并将您的问题标记为正确,因为这和上面的其他评论是让我找到正确答案的原因
  • 我相信它应该是COUNT(id),它在查询中的使用方式很重要。如果查询使用COUNT(id),PHP代码也应该使用COUNT(id)。它区分大小写
  • @RaymondNijland 是的,没错。瞬间注意力不集中 - 已编辑和修复。
  • 好吧,我并没有完全 100% 确定,但对我来说这看起来很合乎逻辑。因为我在使用 MySQL 函数时总是在这些情况下使用别名,所以我从来没有像这样使用它,,
  • 对我来说,我无法让它工作,而不使用别名技术并将其作为索引传递给 $row[]; --但你仍然用这个答案解决了我所有的困惑
【解决方案2】:

是的,您可以为该列设置别名,以便随后将其用作关联数组中的键,或者因为您已经知道该语句:

1.$results = $conn->query($sql); looks something like this:
+-----------+
| count(id) |
+-----------+
|        13 |
+-----------+
1 row in set (0.01 sec)

2.$row = $results->fetch_assoc();returns an array with 1 element

所以,你可以写成 $recordCount = $row[0];获取该计数。

上面的答案也是正确的,但是想让您知道这种直接的替代方法,以防您出于某种原因忘记别名!

【讨论】:

  • 感谢您的帮助。我得到了它的工作,但不确定我是否完全理解了这一切
  • 请告诉我哪一部分,我很乐意进一步解释。
  • 感谢您在这里度过的时光。我暂时停止了 Web 开发工作,不记得具体是哪一部分我被困得最多。非常感谢像你这样的人提供帮助。很多爱
猜你喜欢
  • 2018-05-13
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多