顧客の Web サイトの柔軟な検索メカニズムを作成しています。ユーザーが入力した文字列値を検索するために、ユニオン句を使用してデータベース内のさまざまなフィールドを照会しています。これは、1 つの問題を除いて正常に機能します。
テキストの文字列を現在ゼロに設定されている整数と比較すると、一致は常に true を返します。つまり、MySQL によると、「email@example.com」は 0 に等しいということです。
CAST 関数と CONVERT 関数を利用して、これを標準の文字列と文字列の比較に変換しようとしましたが、正しい構文を取得できないようです。私の試みは、上記の問題を繰り返すか、一部が一致するはずの行をまったく返さないかのいずれかです。また、多くのユニオンを組み合わせているため、これを行うとパフォーマンスに影響することも懸念されます。
私が本当に必要としているのは、入力された文字列とデータベース内の値 (整数または文字列) との厳密な比較です。
編集:これは例です。
CREATE TABLE `test_table` (
`id` INT NOT NULL AUTO_INCREMENT ,
`email` VARCHAR(255) NOT NULL ,
`phone` BIGINT(19) NOT NULL DEFAULT '0' ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
INSERT INTO `test_table` (`id`, `email`, `phone`) VALUES (1, 'email@example.com', 0);
SELECT * FROM test_table WHERE phone = 'email@example.com';
これを実行すると、挿入された 1 行が返されます。私の問題は、そうすべきではないということです!