该表的公司名称 不 已转义 我的qry看起来像
$sql = "SELECT id FROM contact_supplier WHERE name = '$addy' LIMIT 1";
问题出现在表格中的公司名称值有时像“ Acme Int'l S / L ”。
(仅供参考:$ addy的值与DB匹配)
显然,存储时不会转义值。
如何找到我的比赛?
的 [编辑]
啊啊!
我想我是在做些什么。
$ addy值的来源是一个文件
$addresses = file('files/addresses.csv');
然后我做了
foreach ($addresses as $addy) {}
好吧,当我转义$ addy字符串时,它会转义新的行字符并将“ \ r \ n ”包含在比较字符串的末尾。
除非有人建议采用更优雅的方式,否则我想我会用str_replace()去除那些。
:)
的 [\ EDIT]
答案 0 :(得分:0)
使用mysql_real_escape_string
:
$addy = mysql_real_escape_string($addy);
或尝试使用参数化查询(PDO)。
关于这句话:
显然,存储时不会转义值。
这是不正确的逻辑。如果值未在原始INSERT语句中转义,则该语句将失败。如果没有逃避,你会发现syntax error near "l S/L' LIMIT 1"
的错误。数据正确存储在数据库中的事实证明,无论是谁插入数据都能够正确地执行(通过转义或使用参数化查询)。
如果你正确地做了事情,那么数据应该不以转义的形式存储在数据库中。
答案 1 :(得分:0)
为什么您认为已存储在表格中的数据应该被转义?
您应该只在将数据直接写入基于文本的语言之前转义数据,例如作为SQL查询的一部分,或HTML页面或JavaScript代码块中的一部分。
答案 2 :(得分:0)
执行查询时,没有任何空格。 MySQL会对其进行转换和插入,否则它不会因为语法而插入并出错,或者为了安全性而将它们转义为sql注入。
因此,使用转义值的查询将与数据库中的数据一起正常工作。
答案 3 :(得分:0)
如果存储时未对值进行转义,则在尝试输入时会导致SQL错误。
问题是,在进行查询时,数据不会被转义。
快速入侵:使用mysql_real_escape_string
正确的解决方案:不要通过将字符串混合在一起来构建SQL。 Use prepared statements and parameterized queries
答案 4 :(得分:0)
另一种选择是将您的查询更改为此...
$sql = "SELECT id FROM contact_supplier WHERE name = \"$addy\" LIMIT 1";
答案 5 :(得分:0)
问题原来是新行字符 $ addy值的来源就像这样
$addresses = file('files/addresses.csv');
然后我经历了
foreach ($addresses as $addy) {}
当我转义$ addy字符串时,它会转义新的行字符并在比较字符串的末尾插入“ \ r \ n ”。
一旦我逃脱后用string_replace()删除了这些字符,一切都顺其自然
感谢BUNCH的帮助