有人可以解释准备好的陈述吗?

时间:2014-11-20 20:42:38

标签: php mysql sql-injection

我目前正在使用mysql_real_escape_string(),但听说有人使用"准备好的陈述"。所以我想知道这种方式mysql_real_escape_string()是否仍然安全,但如果不是,那么有人可以解释我如何更改我的代码以允许准备语句吗?

$conn=mysql_connect("localhost", "u611142741_list", "REDACTED"); 
 mysql_select_db("u611142741_sugge", $conn);

// If the form has been submitted
if (trim($_POST["suggestion543"]) == "") {
echo "Error";
echo '<script language="javascript">';
echo 'alert("Invalid entry! Try Again.")';
echo '</script>';
echo '<script>';
echo 'setTimeout(function(){ window.location="" }, 500)';
echo '</script>';
} else {
$suggestion = mysql_real_escape_string($_POST['suggestion543']);
$ip = $_SERVER['REMOTE_ADDR'];
echo "Thank you for submitting your suggestion!";
echo '<script>';
echo 'setTimeout(function(){ window.location="" }, 2000)';
echo '</script>';
};



    // Build an sql statment to add the student details
    $sql="INSERT INTO suggestions

(`Suggestion`, `IP Address`) VALUES

('$suggestion','$ip')";
    $result = mysql_query($sql,$conn);


// close connection 
mysql_close($conn);

1 个答案:

答案 0 :(得分:2)

在这里阅读http://php.net/manual/en/pdo.prepared-statements.php。准备好的语句不会转义字符,但会将它们与它们附加的SQL查询分开。在输出时,您仍然希望转义任何用户提交的数据。但是,在进行SQL查询时,预准备语句是避免SQL注入的更有效方法。无论你多么小心,逃避总是留下错误的余地。