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に乗り換えたい。。。



さぁーて今日も「!=」から「<>」に変換する作業がはじまるお・・・・。