当变量$ subject具有单引号时,未插入此查询。有没有可用的解决方案?
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
答案 0 :(得分:7)
例如,考虑使用PDO参数化查询。
或者,将变量括在方括号{}。
中修改强>
我错过了您的变量$subject
包含单引号。这意味着你必须逃脱它们。 (请参阅无数其他答案和mysql_real_escape_string()
关于此问题。)但正如您所看到的,变量中的单引号正是注入攻击的工作原理。转义它们有助于防止此类问题,并允许您的查询存储预期的数据。
在没有引用Bobby Tables的情况下,没有关于注射攻击的答案是完整的。
答案 1 :(得分:3)
转义参数。
$to = mysql_real_escape_string($to);
$subject = mysql_real_escape_string($subject);
mysql_query("INSERT INTO table (to_email_id, subject) values('$to', '$subject');");
另外,请阅读 SQL注入攻击。
答案 2 :(得分:3)
您的查询将返回1064错误,这是您查询中的语法错误。这种情况正在发生,因为变量,特别是问题的主题是$ subject正在改变你所附字符串的格式。例如,假设我们有
$subject = "fire's hotter than it looks";
在查询中对此进行评估时,您的查询字符串将为
INSERT INTO table (to_email_id,subject)
VALUES('the value of the to variable','fire's hotter than it looks');
如果您查看值中的第二项(曾经是$ subject),您会注意到现在您的撇号数量不均匀意味着您的查询结束了');是一个开放的字符串。
如上所述,使用mysql_real_escape_string()等函数添加缺失的斜杠。
快速注释:在“和”(\“,\”)等字符中添加斜杠。告诉mysql将这些解释为字符串字符而不是查询字符串分隔符。
答案 3 :(得分:2)
您需要对mysql_real_escape_string()
和$to
$subject
另外,如果你在开始使用SQL注入之前没有这样做
答案 4 :(得分:1)
答案 5 :(得分:1)
您的查询有一个很棒的“漏洞” - > SQL注入。您应该在此处详细了解这一点:http://en.wikipedia.org/wiki/SQL_injection以及此处http://php.net/manual/en/function.mysql-real-escape-string.php
要做出简短的回答,您必须“转义”传递给mysql的值。最好的方法是使用mysql_real_escape_string函数。
$query = sprintf("mysql_query("INSERT INTO table (to_email_id,subject) values('%s', '%s');", mysql_real_escape_string($to),mysql_real_escape_string($subject));
mysql_query($query);
我希望这会对你有所帮助。
答案 6 :(得分:0)
如果您正在使用
(所有书都可用)作为$ subject,你试图插入到mysql
使用此
$disc_str = addslashes($subject);
“INSERT INTO表名(主题)值('$ disc_str')”;
它在Textarea中也适合我使用tinymce