【问题标题】:Error mysqli_fetch_array() expects parameter [duplicate]错误 mysqli_fetch_array() 需要参数 [重复]
【发布时间】:2016-07-17 09:55:10
【问题描述】:

我收到一个错误 mysqli_fetch_array() 期望参数 1 是 <?php while($row = mysqli_fetch_array($search)):?>. 中的 mysqli_result 我想根据来自另一个页面的会话变量“数据”搜索和显示信息。但我似乎无法显示它。我可以知道 $search 有什么问题吗?

<?php   
        if (isset($_SESSION["data"])) {
           $value = $_SESSION["data"];
            $query = "SELECT * FROM datas WHERE CONCAT(name) LIKE '%".$value."%'";
            $search = filterTable($query);
        }
        else
        {
           $query = "no data found";
           $search = filterTable($query);
        }
        function filterTable($query)
        {
            $connect = mysqli_connect("localhost", "root", "", "databasename");
            $filter = mysqli_query($connect, $query);
            return $filter;
        }

?>

【问题讨论】:

  • ...WHERE CONCAT(name) LIKE...`

标签: php html session


【解决方案1】:

您遇到了这个问题,因为您的查询出错了,但您仍然尝试使用它的结果。具体来说,当没有可用于查询数据库的可用数据时,您仍会运行查询:

if (isset($_SESSION["data"])) {...}
else
{
   $query = "no data found";
   $search = filterTable($query);//WHY?
}

这会给您带来麻烦,因为no data found 不是合法查询。它会出错并返回FALSE,这反过来又会导致fetch_array出现问题

改为更改您的 filterTable 函数以返回您需要的所有行,或者如果没有匹配则返回一个空数组:

$connect = mysqli_connect("localhost", "root", "", "databasename");
$result = mysqli_query($connect, $query);
if($result===false) die (mysqli_error($connect));//server error: prob bad query
$rows = mysqli_fetch_all($filter, MYSQLI_ASSOC);//all matching rows
mysqli_close(); //don't forget to close the connection
return $rows;

在你的脚本中,做

if(isset($_SESSION['data'])) $rows = filterTable($query);
else $rows = [];

现在,稍后在您的脚本中,您可以使用以下命令输出结果:

foreach($rows as $row){
    ...output $row
}

【讨论】:

  • 那么,我应该如何将表值设置为 null 呢?
  • 我已经更新了答案。我会更改 filterTable 以直接为您提供所需的内容,并使用 foreach 循环查看结果。
  • 谢谢,这可行:) 但我无法显示任何结果。不确定我的查询是否正确
猜你喜欢
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
相关资源
最近更新 更多