-1

我在代码片段“searchcar.php”中收到此错误“警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result, array given in”

$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))”请指教!

4

3 回答 3

5

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

好消息是该select方法返回一个结果数组,这意味着您可以替换while($row = mysqli_fetch_assoc($result))

foreach($result as $row)
于 2013-07-23T20:49:44.850 回答
0

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 注入的影响。

于 2013-07-23T20:52:30.723 回答
-1

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

返回先前 MySQL 操作的错误消息文本

mysqli_fetch_array()/mysqli_fetch_assoc()/mysqli_fetch_row() 期望参数 1 是资源或 mysqli_result,布尔值给定

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

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

确保你在逃避你的价值观。查询中的引号可能会导致查询失败(并且还会让您面临 SQL 注入)。使用 mysql_real_escape_string() 转义您的输入。

于 2013-07-23T20:49:27.327 回答