2016-01-26 28 views
3

我看到this question和測試的答案,但注意到,執行SELECT ... WHERE column LIKE "%string%" OR string LIKE CONCAT("%", column, "%")檢查字符串是否包含任何字符串的條件是什麼,反之亦然?

LIKE CONCAT("%", column, "%")如果列的值包含%其次,如果該列是null,則返回true這是不正確的,因爲該列包含什麼是不安全。

+0

看起來您正在使用LIKE查看MySQL ESCAPE CHARACTERS ..這裏是鏈接並查找轉義字符:http://www.techonthenet.com/mysql/like.php – Japongskie

回答

1

你可以只逃脫百分號,如果有的話:

SELECT column1 
FROM table 
WHERE (
    column2 LIKE "%string%" 
    OR string LIKE CONCAT("%", REPLACE(column2, '%', '|%'), "%") ESCAPE | 
    ) 
    AND column2 IS NOT NULL; 

的缺省轉義字符是反斜線但這不是ANSI標準,可以與如果你正在構建一個工作疼痛用另一種語言查詢。所以我使用LIKE ... ESCAPE syntax來指定我自己的逃脫。

CONCAT()返回NULLif any of its arguments are null,所以如果你擔心這一點,只需check for it

+0

'CONCAT()'returns' NULL' [如果它的任何參數都是空的] [2],所以如果你擔心這一點,只需[檢查它] [3]。我知道,但忽略但它是非常重要的! – aidonsnous

相關問題