繁体   English   中英

MySQL PHP 变量包含单引号时未插入查询

[英]MySQL Query not inserted when PHP variable contains single quotes

当变量 $subject 具有单引号时,不会插入此查询。 有没有可能的解决方案?

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

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

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

编辑:

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

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

转义您的参数。

$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注入攻击的信息

您的查询将返回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将它们解释为字符串字符,而不是查询字符串定界符。

您需要在$to$subject值上使用mysql_real_escape_string()

另外,如果您在进行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);

我希望这能帮到您。

如果您正在使用

(所有书籍都可用)作为$ subject,并且您尝试插入mysql

用这个

$disc_str = addslashes($subject);

“插入表名称(主题)值('$ disc_str')”;

它也与tinymce在Textarea中对我有效

解决方法很简单。 在将数据存储到 php 变量之前,只需添加以下方法

$connection = mysqli_connect($host,$dbuser,$dbpass,$dbname);
$to= mysqli_real_escape_string($connection, $old_email);
$subject= mysqli_real_escape_string($connection, $old_subject)


$query = "INSERT INTO  table  (to_email_id,subject) values('$to','$subject');";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM