MYSQL:插入错误

时间:2012-07-11 11:23:21

标签: mysql

MYSQL问题插入某种类型的文本

当我尝试插入此例如:

INSERT INTO `Attacks_key` 
  (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`)
    VALUES 
  ('111', 'REQUEST', ' mysql_real_escape ', '222', 'xss, csrf, id, rfe, lfi');

插入但是当我尝试插入时:

INSERT INTO `Attacks_key` 
 (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) 
   VALUES 
 ('111', 'REQUEST', 'mysql_real_escape_string($_POST['username']); ', '222', 'xss, csrf, id, rfe, lfi');

MYSQL显示以下消息:

#1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'username'附近使用正确的语法]);第1行','222','xss,csrf,id,rfe,lfi')'

这是我的PHP代码

$user="root";
$password="*";
$database="*";
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sql = "SELECT `Key_id` FROM `Event` ORDER BY `Key_id` DESC LIMIT 1";
$result =mysql_query($sql);
$row = mysql_fetch_assoc($result);
$EventKey= $row['Key_id'];
$query="INSERT INTO `PHPLOGS`.`Attacks_key` (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) VALUES ('$EventKey', '$getname', '$getvalue', '$getimpec', '$gettags');";
mysql_query($query);
mysql_close();

和输入'mysql_real_escape_string($ _ POST ['username']);来自用户

有人可以提供帮助

谢谢

3 个答案:

答案 0 :(得分:1)

尝试

$query = sprintf("INSERT INTO Attacks_key (Event_Key ,Variable ,Value ,Impact ,Tags) VALUES ('111', 'REQUEST', '%s', '222', 'xss, csrf, id, rfe, lfi');", mysql_real_escape_string($_POST['username']));

'

声明的那一部分存在'username'的冲突

查看mysql_real_escape_string

答案 1 :(得分:0)

如果您按字面插入mysql_real_escape_string($_POST['username']);,请转义单引号。

INSERT INTO `Attacks_key` 
 (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) 
   VALUES 
 ('111', 'REQUEST', 'mysql_real_escape_string($_POST[\'username\']); ', '222', 'xss, csrf, id, rfe, lfi');

答案 2 :(得分:0)

你应该真正切换到PDO而不是弃用的mysql_函数,你可以使用PDO::quote

  

PDO :: quote()在输入字符串周围放置引号(如果需要)和   使用引号转义输入字符串中的特殊字符   适合底层驱动程序的样式。

但是,执行查询的首选方法是使用准备好的查询,在这种情况下,无论如何都不会出现引用转义问题。再次引用PDO的php手册页:;引用

  

如果您正在使用此函数来构建SQL语句,那么您就是   强烈建议使用PDO :: prepare()来准备SQL语句   使用绑定参数而不是使用PDO :: quote()进行插值   用户输入到SQL语句中。带有约束的预备语句   参数不仅更便携,更方便,不受SQL的影响   注入,但通常比插值快得多   查询,因为服务器端和客户端都可以缓存已编译的表单   查询。

如果由于某种原因PDO不是一个选项,那么mysqli_real_escape_string具有类似的功能。