插入 table SET - 跳过特殊字符的行

Insert into table SET - rows with special characters skipped

我有这个查询:

$sql = " 插入 table 集合 名字 = '$名字', sku = '$数字', 描述 = '$desc' ";

但是没有插入包含一些特殊字符(在我的例子中是这个')的行。我该如何解决? 提前致谢。

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

完成的

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

更详细的答案在How can I prevent SQL injection in PHP?

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

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

然而,更正确的方法是使用与 addslashes 不同的函数,它可以正确处理数据中的所有字符,而不仅仅是撇号。

我正在使用自定义 'escape' 函数,如下所示:

function escape($text)
{
   return str_replace(array('\', "[=11=]", "\n", "\r", "'", '"', "\x1a"), array('\\', '\0', '\n', '\r', "\'", '\"', '\Z'), $text);
}

所以使用这个函数,你会写:

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