【发布时间】:2014-02-15 04:07:26
【问题描述】:
我一直对此感到困惑,终于屈服于在这里寻求帮助。
我有一个用于抓取的 preg_match 脚本,它在一个循环中匹配不同的变量并将它们存储在一个数组中,最终发布到一个 SQL 表中。只要变量包含撇号,就会出现问题。
这是我获取和组织数据的方式
for($i = 0; $i < count($bokse[0]); $i++){
preg_match_all("/title=\"Mere information om (.+?)\"/sim", $bokse[0][$i], $name, PREG_SET_ORDER);
$laeger[$i]['navn'] = stripslashes(mysql_real_escape_string($name[0][1]));
}
现在,我抓取的 mysql_escaped 和 stripped 的值可以是:
**Michael D'Angelo** [NOTICE THE APOSTROPHE]
如果我想将此回显到页面,我可以成功地正确回显D'angelo(带撇号)
echo $laeger[$i]['navn'];
会给我Michael D'Angelo。
但是在将其存储在数据库中时,我遇到了一个悖论;我可以选择将其存储为Michael D\'Angelo
或者存储 D,然后收到 SQL 错误。
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 'angelo'
(..........blablabv...............)
这是我存储数据的方式
mysql_query("INSERT INTO table (name) VALUES ('".$laeger[$i]['navn']."'")"); or die(mysql_error());
根据我是否使用stripslashes,我要么弄乱查询,要么弄乱结果(使用 bachflash)。 FML。
【问题讨论】:
-
stripslashes撤销mysql_real_escape_string所做的。这就是为什么输出未转义并且以后不适合 SQL 字符串上下文的原因。 -
我认为你不明白什么是悖论。