[PHP-users 32826] Re: PDO関数がどのように実行されたかを知るには?
lange @ e-mail.jp
lange @ e-mail.jp
2007年 11月 7日 (水) 14:33:34 JST
tuchidaです。
> 疑問符プレースホルダを伴ったプリペアードステートメントで
> bindParam() などを用いてバインドし、そのあと execute() していますが、
> この bindParam() などがどのようにコールされ、結果的にどのような SQL 文になったのかを
> PHP 側で明示的に知る方法ってあるのでしょうか?
DB側が拡張SQLに対応している場合は、実行時のパラメータ解釈を
DB側でやるという認識で間違いはなかったでしょうか(<不安)
PDOのメソッドでは、DBの解釈後を取得するような物はありません
ので、自前でそろえる必要があるんじゃないでしょうか?
(拡張SQLに非対応の場合はPDO自体が補完するので、できるような
気もするんですが)
とりあえず自作PDOと自作PDOStatementで何とかなるっぽいです。
class PdoCustomize extends PDO {
function __construct( $args1, $args2, $args3="")
{
parent::__construct($args1, $args2, $args3 );
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('PDOStatementCustomize', array($this)));
}
}
class PDOStatementCustomize extends PDOStatement {
public $dbh;
protected $params;
protected function __construct( $dbh )
{
$this->dbh = $dbh;
}
function bindParam( $key, &$value, $options="" ){
$this->params[$key] =
array( "value" => $value, "options" => $options );
if( $options )
parent::bindParam( $name, $value, $options );
else
parent::bindParam( $name, $value );
}
function getQuery(){
$query = $this->queryString; //ここにクエリがはいっている。
foreach( $this->param as $key => $value ){
$query = str_replace( $key, $value, $query );
}
return $query;
}
}
文法エラーはご勘弁ください:D
tuchida <lange @ e-mail.jp>
http://bp2.jp/
PHP-users メーリングリストの案内