私はかなり長い間これに対する答えを探していましたが、これまで誰もこの問題を回避できなかったようです. 多分あなたの何人かはこれについて私を助けることができ、喜んで助けてくれます...それは素晴らしいことです!
私は現在、mysqliラッパーに取り組んでおり、標準クエリに対して既に行っているように、準備されたステートメントのカスタム結果クラスを実装しようとしています! 結果はstmtの「実行」メソッドで生成されるようですが、まだ舞台裏で何が起こっているのか理解できません!
通常のクエリで行われるようなプレーンな mysqli_result の代わりに、生成された結果を結果クラスにポイントする方法 (またはハック) はありますか?
アイデアを得るために、コードからの小さな貼り付けを次に示します。
class extended_mysqli extends mysqli
{
public function __construct()
{
call_user_func_array(array(get_parent_class($this), 'mysqli'), func_get_args());
if ( $this->connect_errno )
{
throw new extended_mysqli_exception('database connection failure');
}
}
public function query ($query, $binds = array())
{
if ( empty( $binds ) )
{
if ( $this->real_query($query) )
{
if ( $this->field_count )
{
return new extended_mysqli_result($this, $query); // select, show, describe
}
else return true; // insert, update, delete
}
else return false; // fix
}
else
{
$stmt = $this->prepare($query);
if ( $stmt->bind_array($binds) )
{
return $stmt->execute() ? $stmt->get_result() : false;
}
else return false;
}
}
public function prepare($query)
{
return new extended_mysqli_stmt($this, $query);
}
// ...
}
class extended_mysqli_stmt extends mysqli_stmt
{
public function __construct($link, $query)
{
parent::__construct($link);
$this->prepare($query);
}
public function execute()
{
// what do i do here ???
}
}
class extended_mysqli_result extends mysqli_result implements countable, iterator, arrayaccess
{
public function __construct($link, $mode = MYSQLI_STORE_RESULT)
{
parent::__construct($this->link = $link, $mode);
}
// ...
}