我有这个问题:
$ sql =“ INSERT INTO表SET name ='$ name', sku ='$ number', description ='$ desc' “;
但是包含一些特殊字符的行(在我的情况下是这个')没有插入..我怎么解决? 提前谢谢。
答案 0 :(得分:1)
您必须使用参数化查询,而不是手动附加这些值。目前,如果名称,数字或描述将包含任何sql,它将被执行。
答案 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中的转义字符。我认为这是通过\