「ECCUBE」カテゴリーアーカイブ

EC-CUBE バインドパラメータをバインドしたかたちでSQL表示

SQLのログが見たい場合に、バインドパラメータが?のままなので
不便である。あくまで簡易的なんだけど、メソッドを作った。

SC_Queryクラスに以下のgetBindSqlLogメソッドを追加。
SC_Queryクラスにselectメソッドがあるので、そこに以下追加

    /**
     * バインドパラメータをバインドしたかたちででのSQLログを出力する
     * @param String $sqlse $this->getSqlの戻り値(バインドパラメータ以外は組み立てられたかたち)
     * @param array $arrWhereVal バインドパラメータの配列
     *
     * ※preg_replaceを置換に使用しているので、文字化けするかもしれない
     */
    public function getBindSqlLog($sqlse, $arrWhereVal) {

    	foreach ($arrWhereVal as $key=>$value) {
    		//数値か否かチェックし、数値じゃない場合はシングルクオートでがこむ
    		//TODO カラムの型判定をしていないので簡易的
    		if(!preg_match("/^[0-9]+$/",$value)){
    			$value = "'" . $value . "'";
    		}
    		$sqlse = preg_replace("/\?/", $value, $sqlse, 1);
    	}
    	echo $sqlse ."\n";
    }

    追加対象のメソッド
    public function select($cols, $from = '', $where = '', $arrWhereVal = array(), $fetchmode = MDB2_FETCHMODE_ASSOC)
    {
        $sqlse = $this->getSql($cols, $from, $where, $arrWhereVal);

		$this->getBindSqlLog($sqlse, $arrWhereVal); ← これこれ

        return $this->getAll($sqlse, $arrWhereVal, $fetchmode);
    }