Mysqli_result класс имеет fetch_all()
метод, возвращающий сразу несколько строк из результирующего набора в виде массива строк (фактически это 2-мерный массив, потому что строки уже являются массивами полей). Также в наборе результатов есть метод fetch_object()
возвращая одну строку в виде объекта.
Теперь я хотел бы расширить класс mysqli_result и добавить новый метод fetch_objects()
(множественное число), которое возвращает ассоциативный массив объектов, где ключом ассоциации является идентификатор записи [id => Object ()]. Конечно, мне нужно будет расширить класс mysqli и переопределить его метод query (), чтобы вернуть мой расширенный набор результатов. Но я не понимаю, как происходит передача параметра соединения и запроса между mysqli и возвращенным mysqli_result.
Это должно работать так:
$db=new ReallyMySQLi(...); //initiating my mysqli
$myrst=$db->query($SQL); //returned my extended result
//fetch_objects() returning associative array of objects
//with record ID as associative key
foreach($myrst->fetch_objects() as $id=>$object)
{
echo 'Customer ID:'.$id; //or $object->id;
echo 'Customer firstname:'.$object->firstname;
echo 'Customer lastname:'.$object->lastname;
}
Я нашел это в руководстве по PHP mysqli_result и возился немного. Я не пытался все же.
class Database_MySQLi extends MySQLi
{
public function query($query)
{
$this->real_query($query);
return new Database_MySQLi_Result($this);
}
}
class Database_MySQLi_Result extends MySQLi_Result
{
public function fetch_objects()
{
$rows = array();
while($row = $this->fetch_object())
{
$rows[$row->id] = $row;
}
return $rows;
}
}
И использование будет
$db=new Database_MySQLi(...); //initiating my mysqli
$myrst=$db->query($SQL); //returned my extended result
//fetch_objects() returning associative array of objects
//with record ID as associative key
foreach($myrst->fetch_objects() as $id=>$object)
{
echo 'Customer ID:'.$id; //or $object->id;
echo 'Customer firstname:'.$object->firstname;
echo 'Customer lastname:'.$object->lastname;
}
Извините, я никогда не использую mysqli в качестве драйвера mysql два года. Но я делаю эту рекомендацию для вас.
Вы можете выбрать PDO, PDO — это круто, как драйвер базы данных для нескольких компьютеров.
Подобно красноречивому доктрине, обе доктрины используют PDO в качестве основы.
$pdo = new PDO('sqlite:db.sqlite');
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Удачи!