【发布时间】:2019-03-03 23:59:05
【问题描述】:
我对 mysqli_num_rows 有一个奇怪的问题。在搜索这个问题时,我只发现有人遇到无论如何都会返回 NULL 的问题。我还检查了official documentation 的函数,它说它返回查询返回的行数的整数。每当我的查询返回 1 行(它永远不应该返回更多)时,它的行为都符合我的预期。当查询返回 0 行时,我希望函数返回 0,但它返回 NULL。为什么不返回 0?
我知道我的数据库连接良好并且我的查询工作正常,因为当我在数据库中查找记录时,我得到一个整数。我只是不明白为什么返回 NULL 而不是 0。
function getArtistID($name) {
global $conn;
$query = "SELECT artist_id FROM artist WHERE artist_name LIKE '${name}'";
$result = mysqli_query($conn, $query);
if ($result->num_rows) {
$row = mysqli_fetch_assoc($result);
return $row['artist_id'];
} else {
return 0;
}
}
【问题讨论】:
-
你怎么知道的?鉴于此代码,无论它返回
0还是null的行为应该是相同的。我有一种感觉,mysqli_query是返回 null 的那个,而不是mysqli_num_rows。 -
不要使用
global。如果您的代码需要,这清楚地表明设计不佳。 -
@tkausl 是的,这是真的。但我很好奇为什么它不返回 0。文档没有提到它返回 NULL。
-
我真的相信您误解了某些信息。如果它真的返回null,请说明你是如何得出这个结论的,包括任何带有
var_dumps的代码和相应的输出。 -
人们常说使用
global不好,因为它很难编写单元测试。如果函数引用全局变量,则不能在有限范围内测试函数。为全局变量创建模拟对象很尴尬。见phpunit.readthedocs.io/en/8.0/fixtures.html#global-state