插入 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)."'";
我有这个查询:
$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)."'";