我收到此错误“警告: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))” 请指教!
答案 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操作
的错误消息文本
从MySQL命令行或phpMyAdmin等工具运行查询。 如果您的查询中有语法错误,这将告诉您它是什么 是
确保您的报价正确无误。查询周围缺少引号或 值可能导致查询失败。
确保您逃脱了自己的价值观。查询中的引号可能会导致 查询失败(并让您打开SQL注入)。使用 mysql_real_escape_string()来逃避你的输入。