CMS一覧

EC-CUBEで最後に実行したSQLを表示する方法

EC-CUBEを使用して、実行したSQL文を表示したい機会というのはないでしょうか?

今回の記事では、EC-CUBE2系でクエリを流した時にSQLを表示する方法について紹介します。

EC-CUBE3系では、フレームワークにsymfony、ORMにDoctrineを使用しているので、下記の記事を参照してください。

SymfonyでDoctrineを使用し実行した最後のクエリの確認の方法について紹介しています。

EC-CUBE2系では、data/class/SC_Query.phpファイルの中のgetLastQuery関数がSQL文を吐き出してくれる関数です。

例えば、select文を画面表示したい場合は、data/class/SC_Query.phpメソッド内で下記の様に記載すると、実行したSQL文を表示することが出来ます。

public function select($cols, $from = '', $where = '', $arrWhereVal = array(), $fetchmode = MDB2_FETCHMODE_ASSOC)
    {
        $sqlse = $this->getSql($cols, $from, $where, $arrWhereVal);
        $this->getLastQuery(true);
        return $this->getAll($sqlse, $arrWhereVal, $fetchmode);
    }

それ以外にも出力したいクエリを実行しているところでもgetLastQueryメソッドを使用することができます。
例えば、下記の様なupdate文を流す処理があったとします。

$objQuery = new SC_Query();
・・・・・・
$objQuery->update("dtb_delivfee", $sqlval, "deliv_id = ? AND pref = ?", array($deliv_id, $cnt));
$objQuery->getLastQuery(true);

上記の例では、SC_QueryのインスタンスからgetLastQueryを呼び出すことでSQLを出力しています。
この方法を使用すれば、update文でもinsert文でも実行したSQL文が画面出力されるはずです。