Как я могу абстрагировать подготовленные инструкции mysqli в PHP?

Я использую свой собственный класс для запросов к базе данных, расширяя mysqli:

class iDatabase extends mysqli { public $errorMsg; private $totalQueries; private $stmt; public function __construct() { parent::__construct( 'localhost', 'asd', 'asd', 'asd' ); if ( mysqli_connect_errno() ) { $this->errorMsg = 'Could not connect to server.<br /><i>' . mysqli_connect_error() . '</i>.'; return; } parent::query( 'SET NAMES utf8' ); } } 

Однако у меня возникают проблемы при выполнении запросов и возвращении результатов. Я использую подготовленные заявления, но способ привязки значений и результатов меня смущает. После небольшого исследования я придумал эту функцию, которая принимает запрос и параметры:

 public function psQuery( $query, $params ) { $this->stmt = parent::prepare( $query ); call_user_func_array( array($this->stmt,'bind_param'), $params ); $this->stmt->execute(); } 

Мой вопрос: какой лучший способ получить результаты от этого? Мне нужно использовать bind_result, затем извлечь каждую строку, а затем закрыть инструкцию. Я бы предпочел просто получить ассоциативный массив для каждой строки – возможно ли это?

Related of "Как я могу абстрагировать подготовленные инструкции mysqli в PHP?"

Я немного поработал над классами Zend_Db_Adapter_Mysqli и Zend_Db_Statement_Mysqli чтобы заставить это работать, поскольку мы хотели, чтобы он соответствовал интерфейсу PDO и PDOStatement . Это было довольно сложно, из-за запутанного способа MySQLi настаивает на том, чтобы вы связывали переменные, чтобы получать результаты, и разнообразие режимов выборки, поддерживаемых PDOStatement .

Если вы хотите увидеть код в Zend_Db , обратите особое внимание на функции Zend_Db_Statement_Mysqli::_execute() и fetch() . В принципе метод _execute() связывает массив ссылок переменных с помощью call_user_func_array() . Сложная часть состоит в том, что вы должны инициализировать массив, чтобы bind_result() ссылки. Э, это было не совсем понятно, поэтому взгляните на код.

Или просто используйте драйвер MySQL PDO. Это то, что я сделал бы на твоих ботинках.

Я бы посмотрел на реализацию Zend_Db , в частности на адаптер mysqli , чтобы посмотреть, как они это делают.

Кажется, что вам нужно сделать то, что вы сказали: «Мне нужно использовать bind_result, затем забрать каждую строку, а затем закрыть оператор»

Я думаю, что нет более простого способа.