SELECT COUNT(*)返回一个对象,而不是整数

时间:2019-01-26 14:28:09

标签: php mysql select mysqli count

我有一个数据库表timestamps_sessions,其中包含用户何时开始在我的网页上进行锻炼的时间戳记,并且仅在用户实际完成锻炼时才进行更新。因此,每一行在started列中始终都有一个值,但并非总是在finished列中都有。后者默认为NULL

我的SELECT COUNT()语句在Sequel Pro中查询时可以完美地工作,并返回正确的整数11。这就是说:实际上,started和{ finished

但是当我在PHP中执行它时,它返回一个包含

的对象
{
    current_field: null,
    field_count: null,
    lengths: null,
    num_rows: null,
    type: null
}

我在Sequel Pro中成功查询的语句如下:

SELECT COUNT(finished) FROM timestamps_sessions

我在PHP中未成功使用的语句如下:

$sql = "SELECT COUNT(finished) FROM timestamps_sessions";
$result = $conn->query($sql);
$exercise['clears'] = $result;

正在对同一数据库和同一表执行其他几个SELECT查询,而不会出现问题。似乎只有COUNT()语句有问题。

我做错了什么,我应该怎么做?

我的目标是计算带有非空finished列的行数,而不传递实际数据以保留带宽。我需要的只是整数。

4 个答案:

答案 0 :(得分:3)

首先,$result是预期的对象。这是mysqli::query()方法返回的结果。您需要先获取它,然后才能从该查询访问数据。如果给计数取别名,将会更容易,因为访问计数变得更容易。

$sql = "SELECT COUNT(finished) as cnt FROM timestamps_sessions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$exercise['clears'] = $row['cnt'];

答案 1 :(得分:1)

传递给count函数的参数可以是任何东西,因为您只需要行数,而不是它们的数据。

SELECT COUNT(1) FROM timestamps_sessions WHERE finished IS NOT NULL;

答案 2 :(得分:0)

您缺少代码mysql_fetch_array才能获取第一条记录

$sql = "SELECT COUNT(finished) totals FROM timestamps_sessions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();

$total = $row['totals'];

答案 3 :(得分:0)

uploads

为count提供一个别名,例如count_finished。然后,您需要从结果对象中获取行。该行中包含您的数据。

看看这个https://www.w3schools.com/php/php_mysql_select.asp