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']);来自用户
有人可以提供帮助
谢谢
答案 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'
的冲突
答案 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具有类似的功能。