2012-02-13 67 views
-2

当变量$ subject有单引号时,未插入此查询。有没有可能的解决方案?PHP变量包含单引号时未插入MySQL查询

mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');"); 
+4

http://php.net/manual/en/function.mysql-real-escape-string.php – j08691 2012-02-13 18:18:24

回答

7

考虑使用参数化查询,例如使用PDO

或者,将变量括在括号{}中。

编辑:

我错过了你的变量$subject包含单引号。这意味着你必须逃避它们。 (关于这一点,请看无数的其他答案和mysql_real_escape_string()。)但是,正如你所看到的,变量内部的单引号恰恰是注入攻击的工作原理。转义它们有助于防止此类问题,并允许查询存储预期数据。

如果没有参考Bobby Tables,没有关于注入攻击的答案是完整的。

+0

+1。这是最好的解决方案,虽然不是OP的问题的直接答案 – 2012-02-13 18:34:25

+0

编辑澄清一点。括号不能解决问题,但我原本以为OP有另一个问题。 :) – JYelton 2012-02-13 18:39:53

+0

+1对于鲍比表:) – iblue 2012-02-13 18:43:21

2

你需要在你的价值观$to$subject

使用mysql_real_escape_string()此外,如果你你是开放的SQL注入

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');"); 

手册:mysql_real_escape_string()

另外,请阅读SQL注入攻击

+0

我需要单引号应插入表中。 例如:我会打电话回家 – logan 2012-02-13 18:36:36

+0

如果您正确地将它们转义出来,单引号将被插入到表格中。 – iblue 2012-02-13 18:42:48

+0

对于换行符,它将替换为\ R \ N,并且在写入表格时 - > RN – logan 2012-02-13 18:57:35

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); 

我希望这能帮到你。

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'); 

如果你看一下第二项中的值,它曾经是$主题,你会注意到你现在有一个不平衡的撇号数,这意味着你的查询结束');是一个开放的字符串。

如上所述,使用诸如mysql_real_escape_string()之类的函数来添加缺少的斜线。

快速提示:在“and”(\“,\')等字符中添加斜杠。告诉mysql将它们解释为字符串而不是查询字符串分隔符。

0

如果您正在使用

(所有书的都可以)为$主题和你正尝试插入到MySQL

使用本

$disc_str = addslashes($subject); 

“INSERT INTO表名(视)值('$ disc_str')“;

我的作品在文本区域与TinyMCE的也

+0

最好将代码与代码格式化 – Razib 2015-02-08 06:03:25

相关问题