我的PHP代码:
function get_something() {
global $link;
$sql = "SELECT * FROM new";
$result = mysqli_query($link, $sql);
$names = mysqli_fetch_all($result, MYSQLI_ASSOC);
return $names;
}
我的问题是什么
当我的表new
为空时,出现以下错误:
mysqli_fetch_all()期望参数1为mysqli_result`
如果不为空,则一切正常。
我需要检查我的数据库是否为空,如果不是,请致电mysqli_fetch_all
。否则,我的函数应该返回一个空数组。
这怎么可能?
答案 0 :(得分:3)
使用mysqli_num_rows($result)
检查查询返回了多少行。但是如果表new
不存在,则$result
将是false
,因此我们必须检查$result
是否有效:
if ($result && mysqli_num_rows($result) > 0)
$names = mysqli_fetch_all($result, MYSQLI_ASSOC);
else
$names = array();
return $names;
答案 1 :(得分:0)
mysqli_fetch_all($result, MYSQLI_ASSOC)生成关联数组的索引数组。当找不到行时,它将传递一个空数组(这是您想要的)。调用mysqli_num_rows()
绝对没有意义,所以不要让脚本执行任何不必要的工作。
此外:
global
声明以在自定义函数范围内传递变量。而是将连接变量作为参数传递给函数。$sql
和$names
在声明后将只使用/引用一次,因此请勿声明它们。mysqli
函数一起使用,因为它不太冗长,但是在我的以下代码段中,我将其保留为原始帖子。建议的代码:
function get_something($link) {
if (!$result = mysqli_query($link, "SELECT * FROM new")) {
return []; // check mysqli_error($link) because your query failed
}
return mysqli_fetch_all($result, MYSQLI_ASSOC);
}