我在MySQL中有以下qquery
CREATE TABLE IF NOT EXISTS `adds` (
`add_id` int(11) NOT NULL,
`title` varchar(500) NOT NULL,
`email` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
`category` varchar(100) NOT NULL,
`subcategory` varchar(100) NOT NULL,
`district` varchar(100) NOT NULL,
`city` varchar(100) NOT NULL,
`discription` varchar(5000) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`price` varchar(100) NOT NULL,
`address` varchar(500) NOT NULL,
`mobile` int(11) NOT NULL,
`date` date NOT NULL
)
然后我尝试通过以下代码插入行
$insert = mysql_query("insert into adds(title,email,name,category,subcategory,district,city,discription,price,address,mobile,date) values('$title','$email','$name','$cat','$subcat','$district','$city','$description','$price','$address','$mobile','$date')") or die(mysql_error());
现在,如果我给我的描述字段赋值,例如this ='lk':
这是导致错误的原因。有人可以告诉我为什么会这样?
答案 0 :(得分:0)
构造查询时,需要转义要插入的数据。 您至少需要在PHP中使用addslashes()函数,如下所示:
$insert = mysql_query("insert into adds(title,email) values('".addslashes($title)."','".addslashes($email)."')")
然而更正确的方法是使用与addslashes不同的函数,它可以正确处理数据中的所有字符,而不仅仅是撇号。
我正在使用我的自定义'escape'功能:
function escape($text)
{
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $text);
}