2009-07-15 露呈
MySQLで等しくないを表す比較演算子はやっぱ<>だよね!
MySQLで等しくないを表す比較演算子 - Unknown::Programming
さて昨日の記事で「!=」使えお!言ったのは訂正させていただきます。やっぱ時代は「<>」だよね。
・・・所変わって今日はPHPの話でもしようかな。
とある環境でPEAR::DBを使っておるのですがこんなコードを書くと何故かエラーになるの。
<?php $data = $db->getAll("SELECT * FROM foo WHERE id != ?",array(2));
エラー内容 SELECT * FROM foo WHERE id = [DB Error: mismatch]
プレースホルダを使って値を設定したいわけだけど何故か上記のエラーが出てコケる。おっかすぃーなーと思って実装覗いてみたらこんなドキュメントを発見
* Example 1.
* <code>
* $sth = $db->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)');
* $data = array(
* "John's text",
* "'it''s good'",
* 'filename.txt'
* );
* $res = $db->execute($sth, $data);
* </code>
アパビュぺけれっ。
なんだと、なんだこのアパビュぺけれっな仕様わっ!
どうやらPEAR::DBは「?」以外にも「!」と「&」もプレースホルダ対象として変換してしまうようです。
なので「!=」の「!」の部分もプレースホルダ対象になってしまい、SQL文が不正になりエラーという流れみたい。ふぬぬ。
というわけで否定の比較演算子は「<>」使った方がいいです。昨日見たコードは死ぬほど正しかったわけなのです。「!=」使えとか言って正直ごめんなさい。
またきょうもひとつべんきょうになりました。僕の勉強不足ぶりが露呈してますね。まずいこんなことでは・・・。
ちなみにPEAR::MDB2は基本「?」だけがプレースホルダ対象です。(コロンなんとかってのもあるみたいだけどね。誤爆の可能性は無いのでここでは無視。)
MDB2に乗り換えたい。。。
さぁーて今日も「!=」から「<>」に変換する作業がはじまるお・・・・。
トラックバック - http://d.hatena.ne.jp/fbis/20090715/1247630417





