2011-03-02 123 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