MYSQL转义字符串实现

时间:2015-03-19 03:06:41

标签: php mysql database

我有一个简单的调查页面,我试图制作。一切都运作良好,除非我在调查页面的评论中使用单引号。当我在其中添加单引号的注释时,数据库查询将不会插入到数据库中。

经过一些谷歌之后,我认为在将其插入数据库之前我必须转义字符串。在插入数据库之前,我使用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]')");

同样,这仅在评论包含单引号时发生。有什么建议?我错误地逃避了字符串吗?

1 个答案:

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