2016-11-17 60 views
1

這個問題是關於澄清。在MySql數據庫中有一個類似varchar的表字段,其值可能包含單引號。不使用PHP中的MySql函數轉義字符

我需要進行一些類似的查詢:

select my_field 
from my_table 
where my_field = 'xxx'rrr'; 

當然,上面並沒有在MySQL工作臺工作。

我曾嘗試:

select my_field 
from my_table 
where my_field = 'xxx''rrr'; 

select my_field 
from my_table 
where my_field = 'xxx\'rrr'; 

他們似乎都從MySQL工作臺工作。

但是,這些查詢是在PHP應用程序中製作和執行的。 我想知道是否有可能的警告或我是否可以使用上述任何方法?沒有使用MySql函數,正確的方法是使用單引號?

+1

是不是正確的方式*不*逃脫,但使用參數呢?然而,在插入數據時,您主動意識到*,就像在MySql Workbench中那樣,我會說正確的方法是以任何一種方式工作。 –

回答

1

有幾種方法,你可以轉義字符。你的兩個建議都是正確的。這裏的official documentation說什麼:

有幾種方式,包括字符串中的引號字符:

一個可以寫成「」「帶引號的字符串內」。

「引用的字符串內部」可能寫爲「」。

在轉義字符前加上引號字符()。

在引用「」的字符串內部不需要特殊處理,不需要加倍或轉義,同樣,「在引用'的字符串內部不需要特殊處理。

要回答您的問題,在查詢中沒有正確或不正確的轉義字符方式,也沒有任何警告 - 只要您遵循上述方法之一即可。


要在php中創建查詢,您不需要執行上述任何操作;代碼爲您處理這個問題。下面是使用PDO一個例子:

$some_variable = "'a'string'with'single-quotes'"; 
$query = "SELECT my_row FROM my_table WHERE some_column = :some_value"; 
$values = array(
    "some_value" => $some_variable, 
); 
$result = $db->get($query, $values)->fetch(); 

你應該更喜歡,你也可以使用MySQLi

+0

更新了我的答案。注意到代碼中的一個小錯誤。 – Chris

2

使用反斜槓工作。 這是我的一個項目爲例:

select * 
from articles 
where title like '%O\'Neill%' 

也許你應該使用like以防萬一你有一些空間,你看不到。

編輯:逃避反斜槓工程,這是不正確的做法。

1

而且,在PHP中,你可能在你的雙引號是這樣的:

where my_field = "xxx'rrr"; 
+0

是的。但我的領域也可能包含雙引號,不幸的是... – JVerstry