Mysql 插入到表集中-跳过具有特殊字符的行

Mysql 插入到表集中-跳过具有特殊字符的行,mysql,special-characters,Mysql,Special Characters,我有一个疑问: $sql=” 插入到表集合中 name=“$name”, sku=“$number”, description=“$desc” "; 但是包含一些特殊字符的行(在我的例子中是)不会被插入。。我怎样才能解决? 提前感谢。阅读mysql中的转义字符。我认为这是通过\完成的。您必须使用参数化查询,而不是手动附加这些值。当前,如果名称、编号或描述包含任何sql,则将执行它 更详细的答案在中,当您构造查询时,您需要转义正在插入的数据。 您至少需要在PHP中使用addslashes()函数,

我有一个疑问:

$sql=” 插入到表集合中 name=“$name”, sku=“$number”, description=“$desc” ";

但是包含一些特殊字符的行(在我的例子中是)不会被插入。。我怎样才能解决?
提前感谢。

阅读mysql中的转义字符。我认为这是通过
\

完成的。您必须使用参数化查询,而不是手动附加这些值。当前,如果名称、编号或描述包含任何sql,则将执行它


更详细的答案在

中,当您构造查询时,您需要转义正在插入的数据。 您至少需要在PHP中使用addslashes()函数,如下所示:

$sql = "INSERT INTO table SET name = '".addslashes($name)."', sku = '".addslashes($number)."', description = '".addslashes($desc)."'";
function escape($text)
{
   return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $text);
}
然而,更正确的方法是使用不同于addslashes的函数,addslashes将正确处理数据中的所有字符,而不仅仅是撇号

我使用的自定义“转义”功能如下:

$sql = "INSERT INTO table SET name = '".addslashes($name)."', sku = '".addslashes($number)."', description = '".addslashes($desc)."'";
function escape($text)
{
   return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $text);
}
因此,使用此函数,您可以编写:

$sql = "INSERT INTO table SET name = '".escape($name)."', sku = '".escape($number)."', description = '".escape($desc)."'";

对它起作用了。。它可以与所有$data一起使用?应该可以。在Mysql中,您还可以使用两个“:
从xml读取simplexml\u load\u文件我假设您没有任何错误报告,因为Mysql不会“跳过”任何内容。它可能会在你不知道的情况下默默地失败。放出来!您的db类将有一个用于错误消息的方法。使用PDO或MySQLi?很好+我要你给我小费。OP确实应该考虑避免SQL注入