在MySQL中使用引号

时间:2012-11-06 18:47:59

标签: php mysql sql opencart

我列出了目前正在导入OpenCart的1000种产品。某些产品标题包含一个引号,用于表示英寸(例如5英寸)。

我已使用此查询成功导入了所有这些产品:

$data['name'] = mysql_escape_string($data['name']);
$sql = "INSERT INTO ".DB_PREFIX."product-description SET language_id = '1', name = '".$data['name']."'";
$query = mysql_query($sql);

当我在OpenCart时,产品列表也会显示,但是当我去编辑产品时,标题输入字段(用于显示标题)会从“符号开始”中删除标题。

这是一个直观的例子: enter image description here

在这里,我们看到标题已完成 enter image description here

在这里,我们看到标题是在“。

之后删除的

我可以确认它不是OpenCart编码错误,因为如果我从界面手动插入产品“它工作正常。错误必须在我的查询中。

如果我的查询出现问题,是否有查询我可以更新所有产品而不是重新插入?

3 个答案:

答案 0 :(得分:2)

openCart的设计使它能够在它存储在 之前的数据库中存储的任何数据中转义所有HTML。所以你只需要修改:

$data['name'] = mysql_escape_string($data['name']);

为:

$data['name'] = mysql_escape_string(htmlspecialchars($data['name'], ENT_QUOTES));

答案 1 :(得分:1)

我不知道OpenChart的内部,但这种症状非常清楚和常见:

  

在这里,我们看到标题是在“。

之后删除的

这通常意味着将内容传递给HTML而不先进行正确的HTML转义。例如,你有这样的INPUT:

<input type="text" value="#VAL#" />

#VAL#是占位符,在需要时替换为值。但是,当您的值为Tablet 7" No Name时,您的HTML将如下所示:

<input type="text" value="Tablet 7" No Name" />

清楚地解释了为什么它在第一次"之后被切断。解决方案是使用所述转义,(或使用更合适的名称 - 将特殊字符转换为实体),在HTML的情况下可以使用{{1函数,所以你的SQL查询与它没有任何关系 - 这只是处理HTML标记的错误处理。

当实体被正确处理时,上面的例子看起来像(在源中):

htmlspecialchars()

然后不会给浏览器带来任何麻烦(浏览器会另外将“实体正确显示为<input type="text" value="Tablet 7&quot; No Name" /> ”。

更多关于"以及HTML is here中的一般特殊字符。

答案 2 :(得分:-3)

从表单收集数据时,只需使用反斜杠\转义所有引号。 将所有单引号'替换为\'