我正在爲客戶的網站編寫靈活的搜索機制。我正在使用聯合子句來查詢數據庫中的許多不同字段,以搜索用戶輸入的字符串值。這工作正常,除了一個問題。嚴格匹配字符串和整數
將文本字符串與當前設置爲零的整數進行比較時,匹配始終返回true。換句話說,根據MySQL,「[email protected]」等於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 protected]', 0);
SELECT * FROM test_table WHERE phone = '[email protected]';
執行此操作,插入的一行將返回。我的問題是,它不應該!
如果您不顯示您的代碼,我們無法告訴您您做了什麼錯誤。通常在調用'prepare()'時指定要使用的數據類型(假設您正在使用準備語句,因爲您應該避免SQL注入)。 – Barmar
我已編輯該帖子以提供示例。在字符串到達查詢之前,我正在處理SQL注入和其他安全措施。 – Tanoro
在你的例子中,你將字符串與一個整數進行比較? – Barmar