2011-04-12 89 views
0

我遇到了mysqli_real_escape_string和單引號的問題。mysqli_real_escape_string問題(和魔法引號關閉)

任何時候,插入的值都會包含'mysqli_real_escape_string將其替換爲\',導致插入失敗。

我沒有魔術引號啓用,這似乎是這個問題的常見原因,但仍然覺得我得到\「而不是\」,甚至\\」

誰能告訴我什麼可能這裏出錯了嗎?

謝謝。

+0

我還應該提到它逃脫其他事情的罰款。如預期的那樣「變成\」並且變成\\ – 2011-04-12 17:25:16

+0

我在「我沒有」的段落中看不到「\」和「\」之間的任何區別?你能在這裏發生一個示例查詢嗎?轉義函數的工作是轉義SQL中任何'meta'字符。一般來說'''''命名爲「大3」 – 2011-04-12 17:30:27

+0

沒有意識到會發生這種情況,當我寫了一個雙倍\第二個已被刪除 我的意思是我得到的不是'或'\'(減去空格) 一個示例查詢可能類似於: $ query =「INSERT INTO'test'('test'.'a','test'.'b')VALUES ('$ a','$ b'); 其中$ a和$ b已經被轉義並且可以包含' – 2011-04-12 17:34:51

回答

2

考慮到這個答案,因爲評論是有點限制。

所以你產生像

$a = mysqli_real_escape_string(... something ...); 
$b = mysqli_real_escape_string(... something else ...); 

$sql = "INSERT ... VALUES ('$a', '$b')"; 

查詢?


好的。讓我們這樣說:

$a = "'"; // a is now a single quote: ' 
$escaped_a = mysql_real_escape_string($a); // should be \' now 

$sql1 = "INSERT ... VALUES ('$a' ..." 
$sql2 = "INSERT ... VALUES ('$escaped_a' ..." 

你應該

INSERT ... vALUES (''' ... 
INSERT ... VALUES ('\'' ... 

第一個是 「壞」 的結束。因爲額外的報價。第二個是有效的。

+0

是的,就是這樣。 – 2011-04-12 17:46:09

+1

不應該是他們的問題。你有沒有比較轉換前後的a/b變量?由於您在錯誤的地方關閉了它們,或者稍後的指令超出了您的設置,因此可能會出現魔術引號。 – 2011-04-12 19:06:24

+0

這很奇怪。該值只是'mysqli_real_escape_string之前'。在調用該函數後,該值變爲\' 它似乎只是在查詢準備好時出現附加\。 任何想法爲什麼會發生?我正在運行格式爲: mysqli_query($ db,「INSERT ... VALUES('$ a','$ b')」); – 2011-04-12 19:22:14