Php 在MySQL中选择某些特殊字符时的奇怪行为

Php 在MySQL中选择某些特殊字符时的奇怪行为,php,mysql,Php,Mysql,我有一行,其中列url具有以下值: http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"] 当我执行以下查询时: SELECT * FROM `mytable` WHERE `url` = 'http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"]' MySQL表示记录不存在。您需要转义两个\“因为\”是一个转义序列:执行的查询中将只保留“引号” \“[转义序列是

我有一行,其中列
url
具有以下值:

http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"]
当我执行以下查询时:

SELECT * FROM `mytable` WHERE `url` = 'http://example.com/a~~1234567890-=!@#$%^&*()_+[\"test\"]'

MySQL表示记录不存在。

您需要转义两个\“因为\”是一个转义序列:执行的查询中将只保留“引号”

\“[转义序列是否转换为]双引号(“”)字符?” \\[转义序列是否转换为]反斜杠(\”)字符

所以


\可能被转义。使用\\来转义“\”时使用的\您的意思是转义“(即\”)时使用的\也应该转义吗?是的,我会尝试“htp://example.com/a~~1234567890-=!@$%^&*(\+[\\\\\\”test\\\”]”(显然在htp中没有空格)
SELECT * FROM `mytable` WHERE `url` = 'http://example.com/a~~1234567890-=!@#$%^&*()_+[\\"test\\"]'