Является ли mysqli_real_escape_string безопасным?

Я новичок в PHP, и я понял, что мое подключение к базе данных с использованием php-формы (с пользовательскими и текстовыми вводами) было абсолютно небезопасным:

Это работало, но было небезопасно:

<?php $link=mysqli_connect('localhost','xx','xx','xx'); $sql=' SELECT * FROM usuarios WHERE username="'.$_POST['usuario'].'" AND pass="'.$_POST['usuario'].'" '; $rs=mysqli_query($link,$sql); mysqli_close($link); ?> 

Итак, я прочитал о mysqli_real_escape_string и решил попробовать:

 <?php $link=mysqli_connect('localhost','xx','xx','xx'); $usuario=mysqli_real_escape_string($link, $_POST["usuario"]); $clave=mysqli_real_escape_string($link, $_POST["clave"]); $sql=' SELECT * FROM usuarios WHERE username="'.$usuario.'" AND pass="'.$clave.'" '; $rs=mysqli_query($link,$sql); mysqli_close($link); ?> 

Это верно? Это хороший пример того, как использовать mysqli_real_escape_string?

Related of "Является ли mysqli_real_escape_string безопасным?"

Это верно?

Да.

Это хороший пример того, как использовать mysqli_real_escape_string?

НЕТ

Если это когда-либо используется, эта функция должна быть инкапсулирована в некоторую внутреннюю обработку и никогда не должна быть вызвана прямо из кода приложения. Вместо этого вместо этого следует использовать заполнитель для представления данных в вашем запросе:

 $sql='SELECT * FROM usuarios WHERE username=? AND pass=?'; 

И затем, при обработке меток-заполнителей, эта функция может применяться (если применимо), но не сама по себе, а по всем правилам форматирования.

Использование функций mysqli () должно быть зарезервировано только разработчикам фреймворка и другим, кто знает обо всех проблемах безопасности, которые он может принести. Для всех остальных есть PDO . Он так же прост в использовании, как и mysqli (), и гораздо безопаснее.

Да, вы будете использовать его сейчас.

Самое приятное в использовании mysqli в том, что оно ориентировано на объекты. Поэтому вы можете использовать его следующим образом:

 <?php $mysqli = new mysqli("host", "user", "password", "database"); $usuario = $mysqli->real_escape_string($_POST["usuario"]); $clave = $mysqli->real_escape_string($_POST["clave"]); $sql=' SELECT * FROM usuarios WHERE username="'.$usuario.'" AND pass="'.$clave.'" '; $mysqli->query($sql); $mysqli->close(); ?> 

Или вы можете использовать PDO.