[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 メーリングリストの案内