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