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

时间:2015-08-01 15:12:00

标签: mysql special-characters

我有这个问题:

$ sql =“             INSERT INTO表SET                 name ='$ name',                 sku ='$ number',                   description ='$ desc'     “;

但是包含一些特殊字符的行(在我的情况下是这个')没有插入..我怎么解决? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

我正在使用我的习惯'逃避'功能如下:

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)."'";

答案 2 :(得分:0)

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

完成的