当变量$ subject有单引号时,未插入此查询。有没有可能的解决方案?PHP变量包含单引号时未插入MySQL查询
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
当变量$ subject有单引号时,未插入此查询。有没有可能的解决方案?PHP变量包含单引号时未插入MySQL查询
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
考虑使用参数化查询,例如使用PDO。
或者,将变量括在括号{}中。
编辑:
我错过了你的变量$subject
包含单引号。这意味着你必须逃避它们。 (关于这一点,请看无数的其他答案和mysql_real_escape_string()
。)但是,正如你所看到的,变量内部的单引号恰恰是注入攻击的工作原理。转义它们有助于防止此类问题,并允许查询存储预期数据。
如果没有参考Bobby Tables,没有关于注入攻击的答案是完整的。
你需要在你的价值观$to
和$subject
使用mysql_real_escape_string()
此外,如果你你是开放的SQL注入
让您远离参数之前并没有这样做。
$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注入攻击。
你的查询有一个伟大的 “洞” - > 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);
我希望这能帮到你。
您的查询将返回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');
如果你看一下第二项中的值,它曾经是$主题,你会注意到你现在有一个不平衡的撇号数,这意味着你的查询结束');是一个开放的字符串。
如上所述,使用诸如mysql_real_escape_string()之类的函数来添加缺少的斜线。
快速提示:在“and”(\“,\')等字符中添加斜杠。告诉mysql将它们解释为字符串而不是查询字符串分隔符。
如果您正在使用
(所有书的都可以)为$主题和你正尝试插入到MySQL
使用本
$disc_str = addslashes($subject);
“INSERT INTO表名(视)值('$ disc_str')“;
我的作品在文本区域与TinyMCE的也
最好将代码与代码格式化 – Razib 2015-02-08 06:03:25
http://php.net/manual/en/function.mysql-real-escape-string.php – j08691 2012-02-13 18:18:24