在这种情况下,我的查询工作正常,我已经在mysql上对其进行了测试。
首先,我有一个自定义查询函数,该函数在MySQLDatabase类中看起来像这样
public function query($query) {
$this->last_query = $query;
$resultado = mysqli_query($this->connection, $query);
$this->confirm_query($resultado);
return $resultado;
}
private function confirm_query($result) {
if ($result === FALSE) {
print_r(mysqli_fetch_assoc($result));
$output ="Error on query". mysqli_error($this->connection)."
";
$output .="Last query :".$this->last_query;
die($output);
}
}
public function fetch_array($result_set){
return mysqli_fetch_array($result_set);
}
然后我有一个名为User的类,它使用MYSQL类
public static function find_by_id($id=0){
global $database;
$result_set = $database -> query("SELECT * FROM users WHERE id={$id}");
$found = $database ->fetch_array($result_set);
return $found;
}
最后,我以这种方式调用index.php中的方法
$result_set = User::find_by_id(1);
$found_user = $database ->fetch_array($result_set);
以下是一些事实:
1.-当我插入数据库中存在的ID值时,会发生此警告
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result,
array given
2.-当我插入数据库中不存在的id值时,会发生此警告。
Warning: mysqli_fetch_array() expects parameter 1 to be
mysqli_result, null given
结论是mysqli_query不是返回结果,而是一个结果对象(如果它在数据库中找到具有特定id的行的情况下)。
mysqli_result Object ( [current_field] => 0 [field_count] => 5
[lengths] => [num_rows] => 1 [type] => 0 )
我如何摆脱这个错误?
found_by_id方法已经在这里调用mysqli::fetch_array:
$found = $database ->fetch_array($result_set);
如果您随后写入,它将返回获取的数组:
$result_set = User::find_by_id(1);
$found_user = $database ->fetch_array($result_set);//fetch_array again
您将获取的数组传递回fetch_array,这不起作用
与编写此代码完全相同:
$result_set = $database -> query("SELECT * FROM users WHERE id=1");
$found = $database ->fetch_array($result_set);
$found_user = $database->fetch_array($found);//
您还好,我正在将数组传递给fetch_array
用这个..
$result_set = User::find_by_id(1);
if($result_set){
$found_user = $database ->fetch_array($result_set);
}
无法解决问题,请参阅我的答案:fetch_array被调用两次
我认为有时$ result_set不返回任何值。 这样就给错误了。
仔细阅读错误消息:" mysqli_fetch_array()期望参数1为mysqli_result,给定数组" $database->fetch_array($result_set);,这意味着$result_set是不是结果资源的数组
好,很好 - - - - - - - - - - - - - -