2012-08-15 62 views
1

我試圖在mysql中使用一個正則表達式,除了當我在我的單詞中使用引號時,它運行良好。在一個mysql REGEXP查詢中轉義單引號

例如:

SELECT * FROM table WHERE REGEXP "^pagina's[^[:space:]]*$" 

我嘗試了所有的下列:

SELECT * FROM table WHERE REGEXP "^'.preg_quote("pagina's").'[^[:space:]]*$" 

SELECT * FROM table WHERE REGEXP "^'.addslashes("pagina's").'[^[:space:]]*$" 

SELECT * FROM table WHERE REGEXP "^'.mysql_escape_real_string("pagina's").'[^[:space:]]*$" 

不幸..

由於單詞「pagina's」中的單引號('),它不會給我任何結果。

我該如何轉義所有引號才能讓mysql看到引號字面並匹配數據庫中的字段?

**編輯**

這是我的PHP代碼:

$word = "pagina's"; 
$ary[] = "LOWER(idx.sidx_word) REGEXP '^".preg_quote($word)."[^[:space:]]*$'"; 
+0

如果我正確理解你的問題,你用'preq_quote(「pagina的」 )'? – Matt 2012-08-15 21:10:33

+0

是的,我嘗試了所有的以下內容: SELECT * WHERE REGEXP 「^ 'preg_quote( 」pagina的「)。'[^ [:空間:]] * $」 和 SELECT * WHERE REGEXP「^」。和addslashes( 「pagina的」) '[^ [:空間:]] * $ 「 和 SELECT * WHERE REGEXP」 ^'。mysql_escape_real_string( 「pagina的」)'[^ [:空間:]]。* $ 「 不幸.. – SirCumz 2012-08-15 21:12:57

+0

從不使用[addslashes](http://php.net/addslashes)來轉義傳遞給MySQL查詢的數據。如果您需要轉義某些內容,請使用[mysql_real_escape_string](http://php.net/mysql_real_escape_string)或[mysqli_real_escape_string](http://php.net/mysqli_real_escape_string)。 – Jocelyn 2012-08-15 21:13:44

回答

0

你需要指定一個表和列名...你沒有正確轉義報價。嘗試是這樣的:

SELECT * 
FROM table 
WHERE column REGEXP '^pagina''s[^[:space:]]*$'; 
+0

我知道,但我只關心REGEX部分 – SirCumz 2012-08-15 21:19:15

+0

我不確定你的意思。你有沒有在mysql控制檯中直接運行查詢?你有結果嗎?如果您發佈了您正在運行的實際查詢以及一些示例數據,則可能會得到更好的答案。 – bobwienholt 2012-08-15 21:22:25

+0

我使用PHP代碼更新了我的帖子。 查詢運行oke與我使用的所有其他字符串,除了包含單引號的單詞。 – SirCumz 2012-08-15 21:23:35

0

你必須爲正則表達式指定列名和景觀帶斜線報價:

SELECT * 
FROM table 
WHERE column REGEXP '^pagina\'s[^[:space:]]*$';