Я сейчас пользуюсь 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);
Читайте о них здесь http://php.net/manual/en/pdo.prepared-statements.php. Подготовленные операторы не экранируют символы, но отделяют их от SQL-запроса, к которому они прикреплены. Вы по-прежнему хотите избегать любых пользовательских данных при выводе. Однако при выполнении запросов SQL подготовленные операторы являются гораздо более эффективным способом избежать инъекций SQL. Побег всегда оставляет место для ошибки, независимо от того, насколько вы осторожны.
Других решений пока нет …