2011-03-02 127 views
1
@@SESSION.sql_mode; 
@@GLOBAL.sql_mode; 

都出現空白,my.cnf不顯示「NO_BACKSLASH_ESCAPE」標誌,這是查詢的一部分,它運行在本地服務器上,但不在我的主服務器上。MySQL添加額外的反斜槓?

UPDATE `table` 
SET `data` = "[{\"_talent\'s\"etc" 

現在我知道我可以用「[{」「_talents」,「等」,但我寧願不要,因爲它是更容易爲我保持到一直工作之前我目前逃逸的安全方法。

字符集是我正在更新的表的UTF-8。最奇怪的是,它插入但不更新!

這一個真的讓我撓。有任何想法嗎?

乾杯

編輯:

我發現了該服務器試圖解釋,像這樣的查詢:

Failed to execute SQL : SQL UPDATE `build` SET `data` = "[{\"_talent\'s" WHERE `build_id` = 1 AND `userId` = 1128; failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `build` SET `data` = "[{\\"_talent\\'s" WHERE `build_id` = 1 AND `userId`' at line 1 

但它肯定應該是一樣的,爲什麼是SQL引擎逃脫我的逃跑! (如果我離開了逃逸查詢仍然失敗)

+1

** Blackslash ** ...是黑色安息日和槍炮與玫瑰的組合嗎?請原諒雙關。不能幫助自己。 – froeschli 2011-03-02 11:32:47

+0

哈哈,哎呀!謝謝 – Dorjan 2011-03-02 11:37:26

+0

請有人可以幫忙,我會走出我的腦海。它適用於我的本地服務器,但不適用於Web服務器。網絡服務器似乎是兩次逃脫相同的聲明! :S – Dorjan 2011-03-02 12:46:44

回答

0

我發現它似乎一直是我的webmin版本中加入在控制檯上...... D'哦

當我從PHP運行查詢它通過完美的去了。

但非常感謝。

0

你可以試試這個 -

UPDATE 'table' 
SET 'data' = '[{"_talents"etc' 
+0

你的編輯確實有效,但是如果我將字符串更改爲人才,它會再次失敗 – Dorjan 2011-03-02 11:32:19

+0

@Dorjan - 試試這個,如果你使用單引號而不是雙引號 – 2011-03-02 11:33:54

+0

我已經完成了,直到我需要一個's ,這一個感覺完全不合邏輯,但我確信有一個理智的原因,爲什麼這不起作用:S這與utf8_general_ci或InnoDB有什麼關係? – Dorjan 2011-03-02 11:34:58

0

這是相關的?

MySQL/PHP problem with " and '

哪個implys你可能啓用魔術引號的地方添加額外的反斜槓(這可以解釋爲什麼你會得到你的服務器上奇behaviout而不是本地計算機)?

這兩種平臺上的不同行爲意味着服務器上的一些配置問題(我確定它們是相同的版本?)雖然我在這裏達成了一點。

+0

對不起,這不是:) – Dorjan 2011-03-04 14:14:38

+0

雖然我的答案的第二部分更相關。 :) – NotJarvis 2011-03-08 10:28:58