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