2

データベースクエリに独自のクラスを使用して、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 を使用して各行をフェッチし、ステートメントを閉じる必要があります。行ごとに連想配列を取得したいのですが、それは可能ですか?

4

3 に答える 3

4

andインターフェイスに準拠させたかったので、これを機能させるためにZend_Db_Adapter_MysqliandZend_Db_Statement_Mysqliクラスにかなりの作業を行いました。MySQLi が結果を得るために変数をバインドすることを主張する紛らわしい方法と、.PDOPDOStatementPDOStatement

のコードを見たい場合は、関数とZend_Dbに特に注意して ください。基本的に、メソッドは を使用して変数参照の配列をバインドします。注意が必要なのは、関数が参照を取得できるように配列を初期化する必要があることです。ええと、それは完全に明確ではなかったので、コードを見てください。Zend_Db_Statement_Mysqli::_execute()fetch()_execute()call_user_func_array()bind_result()

または、PDO の MySQL ドライバーを使用してください。それが私があなたの立場で行うことです。

于 2009-09-07T02:37:23.480 に答える
1

Zend_Db、特にmysqli adapterの実装を見て、彼らがどのようにそれを行っているかを確認します。

于 2009-09-07T01:03:44.127 に答える
0

あなたが言ったことをしなければならないようです

これ以上簡単な方法はないと思います。

于 2009-09-07T01:14:20.293 に答える