我有一个简单的调查页面,我试图制作。一切都运作良好,除非我在调查页面的评论中使用单引号。当我在其中添加单引号的注释时,数据库查询将不会插入到数据库中。
经过一些谷歌之后,我认为在将其插入数据库之前我必须转义字符串。在插入数据库之前,我使用mysqli_real_escape_string来转义字符串,但这似乎没有帮助。
这是我的代码,它将用户的注释插入到数据库中($ con未显示为安全性)
mysqli_real_escape_string($con,$_POST['question_1']);
mysqli_real_escape_string($con,$_POST['question_2']);
mysqli_real_escape_string($con,$_POST['question_3']);
mysqli_real_escape_string($con,$_POST['question_4']);
mysqli_real_escape_string($con,$_POST['question_5']);
mysqli_query($con, "INSERT INTO feedback (question_1, question_2, question_3, question_4, question_5) VALUES ('$_POST[question_1]', '$_POST[question_2]', '$_POST[question_3]', '$_POST[question_4]', '$_POST[question_5]')");
同样,这仅在评论包含单引号时发生。有什么建议?我错误地逃避了字符串吗?
答案 0 :(得分:1)
你误解了这里发生的事情
mysqli_real_escape_string($con,$_POST['question_1']);
此函数返回转义字符串。然后在SQL
中使用此字符串$question1 = mysqli_real_escape_string($con,$_POST['question_1']);
//Do your other escapes here
mysqli_query($con, "INSERT INTO feedback (question_1, question_2, question_3, question_4, question_5)
VALUES ('$question1', ...)");
这里更好的解决方案是准备好的陈述。这不要求你逃避任何事情。数据单独发送并进行适当处理
$prep = mysqli_prepare($con, 'INSERT INTO feedback (question_1, question_2, question_3, question_4, question_5)
VALUES (?, ?, ?, ?, ?)');
mysqli_stmt_bind_param($prep, "sssss", $_POST['question_1'], $_POST['question_2'], $_POST['question_3'], $_POST['question_4'], $_POST['question_5']);
mysqli_stmt_execute($prep);