【SQL】db2_bind_param()を使用したあいまい検索
こんにちは、上村です。
新人さんから「PHPで以下のSQL文を実行したところ、『Warning: db2_bind_param() [function.db2-bind-param]: Describe Param Failed in …』というエラーが出てしまいます。」という相談を受けました。
パラメータの記述が間違っているようなので、エラーが表示されている行を確認すると、あいまい検索を実装するためにLIKE句にワイルドカード(%:パーセント)が記述してありました。
ワイルドカードの記述位置を修正したところ、エラーメッセージが表示されなくなりました。
そもそも、変更前のソースコードでは、実装したいあいまい検索とは異なる抽出条件になっていますね(・・;
例)ABCを含む文字列ではなく、’ABC’を含む文字列を抽出してしまう
'%?%' ↓ ↓'ABC'という文字列が入った変数をバインドすると… ↓ '%'ABC'%'
元のソースコード
/* ----- DBの接続 ----- */ $conn = db2_connect($database, $user, $password); $sql = 'SELECT *'; $sql .= ' FROM ライブラリ.ファイル'; $sql .= ' WHERE カラム1 LIKE \'%?%\''; $sql .= ' ORDER BY カラム1'; /* ----- SQL文の準備 ----- */ $stmt = db2_prepare($conn, $sql); /* ----- SQL文にパラメータをセット ----- */ $code = 'WD'; db2_bind_param($stmt, 1, 'code', DB2_PARAM_IN); /* ----- SQL文を実行 ----- */ db2_execute($stmt); /* ----- 結果を表示 ----- */ while($row = db2_fetch_assoc($stmt)) { echo $row['カラム1'] . ' ' . $row['カラム2'] . ' ' . $row['カラム3']; echo '改行タグ'; } /* ----- DBの切断 ----- */ db2_close($conn);
変更後のソースコード
/* ----- DBの接続 ----- */ $conn = db2_connect($database, $user, $password); $sql = 'SELECT *'; $sql .= ' FROM ライブラリ.ファイル'; $sql .= ' WHERE カラム1 LIKE ?'; $sql .= ' ORDER BY カラム1'; /* ----- SQL文の準備 ----- */ $stmt = db2_prepare($conn, $sql); /* ----- SQL文にパラメータをセット ----- */ $code = '%' . 'WD' . '%'; db2_bind_param($stmt, 1, 'code', DB2_PARAM_IN); /* ----- SQL文を実行 ----- */ db2_execute($stmt); /* ----- 結果を表示 ----- */ while($row = db2_fetch_assoc($stmt)) { echo $row['カラム1'] . ' ' . $row['カラム2'] . ' ' . $row['カラム3']; echo '改行タグ'; } /* ----- DBの切断 ----- */ db2_close($conn);