如何使用mysqli_fetch_all()从查询返回空数组或结果集?

时间:2018-08-12 12:15:27

标签: php mysqli resultset

我的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。否则,我的函数应该返回一个空数组。

这怎么可能?

2 个答案:

答案 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在声明后将只使用/引用一次,因此请勿声明它们。
  • 根据个人喜好,我建议将OO语法与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);
}