[PHP-users 30666] Re: プリペアドステートメントで execute する直前に実行される SQL 文そのものを知る方法?
SHIMOOKA Hideyuki
dimension @ pat.hi-ho.ne.jp
2006年 11月 3日 (金) 02:15:57 JST
下岡です。
---- haward99 @ yahoo.co.jpさん曰く...
>DB検索のためのプリペアドステートメントと、
>負荷対策のためのキャッシュのからみでちょっとどうしよーかなーと思っております。
>
>1行目: $id = 1001; // 会員番号のつもり
>2行目: $stmt = $dbh->prepare("SELECT * FROM KAIIN WHERE ID = ?");
>3行目: $stmt->bindParam(1, $id);
>4行目: $stmt->execute();
>
>とすることで、
>SELECT * FROM KAIIN WHERE ID = 1001
>というSQL文が実行されますが、
>上で言う3行目と4行目の間、つまりexecuteを実行する前に、
>発行されるSQL文そのものを知る方法ってないですかね?
同じ要件で、バインド後のSQLではなくprepareするSQLとバインド
する値のmd5をキーにして使ったことがあります。
以下、擬似コードです。
$bind_param = array()
$bind_param[] = 1001;
$query = "SELECT * FROM KAIIN WHERE ID = ? ";
$key = md5($query . '_' . join('_', $bind_param));
if (isset($cache[$key])) {
$data_list = $cache[$key];
} else {
$stmt = $dbh->prepare($query);
: // execute & fetch
$cache[$key] = $data_list;
}
// use $data_list
--
0---+----1----+----2----+----3----+----4----+----5----+----6
Hideyuki SHIMOOKA / shimooka @ axissoft.co.jp
AXISSOFT Corporation, Solution Div.
+81-3-5950-3525, 3529(fax)
PHP-users メーリングリストの案内