查询MySQL中的未转义字符串
该表的公司名称为不是已转义。
我QRY看起来像查询MySQL中的未转义字符串
$sql = "SELECT id FROM contact_supplier WHERE name = '$addy' LIMIT 1";
这个问题是在表中的公司名称值有时会像“阿克米国际S/L”。
(FYI:在$阿迪的值相匹配的DB)
显然,存储当值没有逃脱。
如何找到我的比赛吗?
[编辑]
AHAH!
我觉得我我们到的东西。 的$阿迪价值的来源是一个文件
$addresses = file('files/addresses.csv');
然后我做了
foreach ($addresses as $addy) {}
好吧,当我逃离$阿迪字符串,它逃避新行字符和包括“\ r \ n“到比较字符串的末尾。
除非有人提出了一种更优雅的方式,我想我会概率剥夺那些有str_replace()函数。
:)
[\编辑]
使用mysql_real_escape_string
:
$addy = mysql_real_escape_string($addy);
,或者尝试使用参数化查询(PDO)。
对本声明:
显然,存储当值没有逃脱。
这是不正确的逻辑。如果这些值在原始INSERT语句中未被转义,则该语句将失败。如果没有逃脱,你会得到syntax error near "l S/L' LIMIT 1"
的错误。数据正确存储在数据库中的事实证明,插入它的人能够正确地做到这一点(通过转义或使用参数化查询)。
如果你正在做的事情正确,那么数据应该而不是存储在数据库中的转义形式。
这是第一件事我试过一个;),但很可惜......没有行再搭配因为DB具有非转义值... IE浏览器:它试图逃出我的字符串“Acme的诠释\'L”相匹配“Acme Int'l”的DB值。其他想法????? – mOrloff 2012-04-12 22:01:37
@mOrloff:对不起,你明显错了。如果字符串在你的SQL查询中被转义,它将*匹配“非转义”值。事实上,这是*整点*!很明显,你的字符串不匹配的原因是不同的。而且你问另一个想法......但你甚至*尝试*使用参数化查询,这是我的另一个建议?还是你完全忽略了我的答案? – 2012-04-12 22:06:29
:D ..谢谢BUNCH ..请参阅我的更新到我的OP – mOrloff 2012-04-12 22:26:22
为什么你认为已经存储在表中的数据应该逃脱?
只有在数据直接写入基于文本的语言之前,您才应该转义数据。作为SQL查询的一部分,或HTML页面或JavaScript代码块中。
当执行查询时,没有什么espaced的。 MySQL转换它并插入,否则它不会插入并因为语法而给出错误,或者我们为了像sql注入这样的安全性而转义它们。
因此,与转义的值查询将是工作的罚款与数据库中的数据。
如果我理解正确,那么我的最初预感是正确的......我逃脱了弦乐......并得到了零匹配:( – mOrloff 2012-04-12 22:12:46
你能提供你逃过的字符串的值,并且表中的行应该匹配吗?也许你是逃避2次或更多次,这将导致\\'字符。同时让我举个例子,你的数据库中有“Ata's Home”,它看起来没有逃脱,你用WHERE column ='Ata \'Home'来查询它,并且应该匹配,如果不匹配,找出问题 – 2012-04-12 22:16:34
如果当你试图进入其中存储那么就会造成SQL错误时,并没有逃过值。
的问题是,当你查询的数据不被转义。
快速劈:使用mysql_real_escape_string
妥善解决:不要被串在一起,混搭构建SQL。 Use prepared statements and parameterized queries
感谢您的链接...这是一个快速和肮脏的任务,所以我正在恢复whatev呃方法出来的存储(我的尘土飞扬的脑)首先...大声笑...显然我应该重新思考这种方法:D – mOrloff 2012-04-12 22:37:52
另一种办法是改变你的查询,这...
$sql = "SELECT id FROM contact_supplier WHERE name = \"$addy\" LIMIT 1";
试过... MySQL只需要单引号中的值(甚至直接在PMA中测试): ( ... 其他想法 ?? – mOrloff 2012-04-12 22:04:46
问题竟然是换行字符 的$阿迪价值的源泉开始了这样的
$addresses = file('files/addresses.csv');
我再通过
foreach ($addresses as $addy) {}
去当我上课抓住$ addy字符串,它将转义新的字符串,并在比较字符串的末尾插入“\ r \ n”。
只要我逃出来,与下降string_replace()的字符,一切都顺顺当当
感谢-一个束团的帮助
你尝试查询它是现在的方式是什么? – 2012-04-12 21:29:52
是的,尝试过,但没有运气。 – mOrloff 2012-04-12 22:13:33
因为直到第二天我还没有回答我自己的问题,所以我编辑了一些内容。谢谢,一堆:) – mOrloff 2012-04-12 22:23:36