#php #mysql #mysqli
#php #mysql #mysqli
Вопрос:
В PHP я использую mysqli для извлечения результирующего набора из базы данных. После получения этого результирующего набора я затем передаю его функции, которая возвращает объект. Учитывая результирующий набор:
Почему эта функция:
/**
* @param resource|mysqli_result $result
* @return array|bool
*/
public static function getObjectArray($result) {
if($result === FALSE) {
return FALSE;
}
$func = ((gettype($result) === 'resource') ? 'mysql' : 'mysqli') . '_fetch_object';
$array = array();
while($row = $func($result)) {
$array[] = $row;
}
return $array;
}
возвращает пустой массив. При отладке он просто пропускает тело цикла while. Эта функция работала без проблем в сотнях других мест, но с этим конкретным результирующим набором она проигрывает.
Заранее спасибо.
Комментарии:
1. У меня есть подсказка, проверьте, использует ли это ресурс
is_resouce
, или, что еще лучше, проверьте, является ли это результирующим набором MySQLi$result instantof mysqli_result
Ответ №1:
Я не знаю подробностей об этом, но похоже, что результирующий набор представляет собой своего рода неявный переход по ссылке. Я разбил его только на ту часть, которая была нарушена, и провел несколько тестов, и даже если я передаю результирующий набор в качестве параметра функции, он устанавливает data_seek оригинала в конец. Я сбрасываю это в результирующем наборе, который я передаю, и он работает нормально. Если у кого-нибудь есть представление о том, что происходит на самом деле, я бы хотел получить более глубокое понимание.
Спасибо