SELECT COUNT(*) 返回一个对象而不是一个整数
Posted
技术标签:
【中文标题】SELECT COUNT(*) 返回一个对象而不是一个整数【英文标题】:SELECT COUNT(*) returns an object instead of an integer [duplicate] 【发布时间】:2019-06-20 02:47:13 【问题描述】:我有一个数据库表timestamps_sessions
,其中包含用户在我的网页上开始练习的时间戳,并且只有在用户实际完成练习时才会更新。因此,每一行在started
列中总是有一个值,但并不总是在finished
列中。后者默认为NULL
。
当我在 Sequel Pro 中查询时,我的 SELECT COUNT()
语句完美运行,并返回正确的整数 11。也就是说:确实只有 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
列的行数,而不传递实际数据以保留带宽。我只需要整数。
【问题讨论】:
什么是$conn
?
在 SELECT 子句中使用类似 total
的别名并访问第一行的 ['total']
元素。
如果 $conn
是 PDO 对象,请参阅 ***.com/questions/883365/row-count-with-pdo
@MartinHeralecký 这是一个 mysqli 对象,从问题中提供的对象中的属性可以看出 - num_rows
是 MySQLi 结果属性。
【参考方案1】:
首先,$result
是一个符合预期的对象。这是mysqli::query()
方法返回的结果。在您可以访问此查询中的数据之前,您需要获取它。如果您为计数提供别名会更容易,因为访问计数会变得更容易。
$sql = "SELECT COUNT(finished) as cnt FROM timestamps_sessions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$exercise['clears'] = $row['cnt'];
mysqli::query()
docs
mysqli::fetch_assoc()
docs
【讨论】:
【参考方案2】:传递给 count 函数的参数可以是任何值,因为您只需要行数,而不是它们的数据。
SELECT COUNT(1) FROM timestamps_sessions WHERE finished IS NOT NULL;
【讨论】:
【参考方案3】:$sql = "SELECT COUNT(finished) AS count_finished FROM timestamps_sessions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
echo $exercise['clears'] = $row['count_finished'];
给计数起一个别名,例如 count_finished。然后从结果对象中您需要获取该行。该行包含您的数据。
看看这个https://www.w3schools.com/php/php_mysql_select.asp
【讨论】:
【参考方案4】:您缺少代码 mysql_fetch_array
以获取第一条记录
$sql = "SELECT COUNT(finished) totals FROM timestamps_sessions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$total = $row['totals'];
【讨论】:
您不能混合使用 MySQL 和 MySQLi 库。 是的,抱歉,我修好了 另外,当使用面向对象的接口时,fetch_assoc()
是在对象上调用的方法,不带任何参数。 :-)以上是关于SELECT COUNT(*) 返回一个对象而不是一个整数的主要内容,如果未能解决你的问题,请参考以下文章
Doctrine queryBuilder:返回对象而不是数组