в этом случае мои запросы работают нормально, я тестировал их на 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)."<br/>"; $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, существующее в моей базе данных
Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, заданный массив
2.- Это предупреждение возникает, когда я вставляю значение id, которое не существует в моей базе данных.
Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, null задан
Вывод состоит в том, что mysqli_query не возвращает результаты, а объект результата, подобный этому, в случае, если он находит строку в базе данных с определенным идентификатором.
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);//<-- second call...
Использовать это..
$result_set = User::find_by_id(1); if($result_set){ $found_user = $database ->fetch_array($result_set); }