警告:mysqli_fetch_assoc()期望参数1是mysqli_result,给出的数组

时间:2013-07-23 20:47:03

标签: php mysqli

我收到此错误“警告:mysqli_fetch_assoc()期望参数1为mysqli_result,在”代码段外“中给出的数组 “searchcar.php”

$modelmake = $_POST['model_make'];
$result = $db->select('car_information','*', 'Model_Make LIKE \'%$modelmake%\''); 
while($row = mysqli_fetch_assoc($result))
{
    echo 'Model'.$row['model_make'];
}

这里是“database.php”选择函数

的代码片段
 public function select(
        $table,
        $fields = '*',
        $where = '1=1',
        $order = '',
        $limit = '',
        $desc = false,
        $limitBegin = 0,
        $groupby = null,
        $monitoring = false
    ) //monitoring is set to true to view the actual query
    {
//  $query ='SELECT ' . $fields . ' FROM ' . $table ;
    $query = 'SELECT ' . $fields . ' FROM ' . $table . ' WHERE ' . $where;

        if (!empty($groupby)) {
            $query .= ' GROUP BY ' . $groupby;
        }

        if (!empty($order)) 
        {
            $query .= ' ORDER BY ' . $order;

            if ($desc) 
            {
                $query .= ' DESC';
            }
        }

        if (!empty($limit))
        {
            $query .= ' LIMIT ' . $limitBegin . ', ' . $limit;
        }

        $result = $this->_sendQuery($query);

        $resultArray = array();

        while ($row = mysqli_fetch_assoc($result)) 
        {
            $resultArray[] = $row;
        }

        if ($monitoring) 
        {       
            // If monitoring is activated, echo the query
            echo $query;
        }
        return $resultArray;
    }    

我想使用这一行“while($ row = mysqli_fetch_assoc($ result))” 请指教!

3 个答案:

答案 0 :(得分:5)

您的select方法返回的是array,而不是resource。这意味着mysqli_fetch_assoc投诉是正确的。

好消息是select方法返回了一系列结果,这意味着您可以用

替换while($row = mysqli_fetch_assoc($result))
foreach($result as $row)

答案 1 :(得分:1)

select()方法清楚地执行查询,然后返回结果数组。为什么你希望能够(甚至需要)获取该数组并再次对其进行mysqli_fetch_assoc()

我认为您可以直接在$result上进行迭代:

$modelmake = $_POST['model_make'];
$result = $db->select('car_information','*', 'Model_Make LIKE \'%$modelmake%\''); 
foreach ($result as $row)
    echo 'Model'.$row['model_make'];
}

还应该指出,您的代码容易受到SQL注入的攻击。<​​/ p>

答案 2 :(得分:0)

使用mysqli_error()http://www.php.net/manual/en/mysqli.errno.php

  

返回先前MySQL操作

的错误消息文本

mysqli_fetch_array()/mysqli_fetch_assoc()/mysqli_fetch_row() expects parameter 1 to be resource or mysqli_result, boolean given

  

从MySQL命令行或phpMyAdmin等工具运行查询。   如果您的查询中有语法错误,这将告诉您它是什么   是

     

确保您的报价正确无误。查询周围缺少引号或   值可能导致查询失败。

     

确保您逃脱了自己的价值观。查询中的引号可能会导致   查询失败(并让您打开SQL注入)。使用   mysql_real_escape_string()来逃避你的输入。