2012-09-12 41 views
0

我有一個腳本可以讓我替換數據庫中的值。替換語句中的反斜槓 - 語法錯誤

當我使用這個:

$search[] = ("\\"); 

$sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search[$i].'\',\''.$replace[$i].'\')'; 

我收到以下錯誤:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在第一行使用'''''''''')

我理解它可能只是一個逃避反斜槓的問題,但我試過了一切(改爲雙引號,轉義,採用字符碼,UTF-8編碼/解碼等,並仍然沒有運氣

注意,其他值正常工作(我的$列表中搜索[]值)

+0

請確認echo $ sql [$ handle] ['sql'] ='UPDATE'。$ table。' SET'。$ field。' = REPLACE('。$ field。',''。$ search [$ i]。'\',''。$ replace [$ i]。'\')'; 退出;我們可以看到這個查詢是如何組成的。 –

+1

作爲旁註,''UPDATE $ table SET $ field = REPLACE('$ field','{$ search [$ i]}','{$ replace [$ i]}')「;'會比較容易讀書。 – raina77ow

+0

這給了我這樣的: 通知:未定義抵消:42在d:行\ XAMPP \項目\ replace.php 201 注意:未定義抵消:42在d:行\ XAMPP \項目\ replace.php 201 UPDATE table SET price = REPLACE(price,'','') – Woistmeinhandy

回答

2

因爲"\\"創建的字符串\,因此普通的SQL是REPLACE('...,\'),這是一個錯誤。使用:

$search[] = ("\\\\"); 

看看mysql string literals

+0

這給了我這個錯誤:(錯誤:從正則表達式得到錯誤'反斜槓(\)') – Woistmeinhandy

+0

使用'echo $ sql [$ handle] ['sql'];'調查生成了什麼SQL,也許你需要逃脫'\'也作爲正則表達式的一部分,因此您可能以'$ search [] =(「\\\\\\」)結尾;' – Vyktor

+0

回顯給我以下值: SELECT * FROM表WHERE列REGEXP BINARY('\') – Woistmeinhandy

0

使用本:

$search[] = ("{\}"); 

這將搜索\

$search[] = ("{\\}"); 
如果你要搜索2個反斜線

....

+0

嗯實際上,這裏這裏不顯示任何錯誤,但它不刪除反斜槓要麼=/ – Woistmeinhandy

+0

@Woistmeinhandy和PHP函數stripslashes? http://php.net/manual/en/function.stripslashes.php – Mathlight

+0

這似乎不工作要麼=/ – Woistmeinhandy