如果我不这样做有什么缺点;t使用mysqli_real_escape_string()


What are the disadvantages if I don't use mysqli_real_escape_string()?

据我所知,如果我不使用mysqli_real_escape_string(),我可能会在数据库中得到错误的条目。如果我错了,请纠正我。

有什么缺点吗?

不要使用它,而是使用准备好的语句。这是避免SQL注入的方法。

简而言之,您需要做一些的事情来防止字符串被附加到SQL中,从而改变其含义(通过巧妙地使用引号等)。虽然mysqli_real_escape_string解决了很多这些问题,但它并不是防弹的。

SQL注入的一个例子:

假设你有一个错误的代码:

$name = $_POST['name'];
$password = $_POST['password'];
$sql = "SELECT role FROM user 
         WHERE name = '$name' AND password = '$password'";
$result=mysqli_query($con,$sql);
$row = $result->fetch_assoc();
if ($row['role'] === 1) { 
      // do all kinds of stuff allowed to admin.
}    

黑客按照以下填写用户名/密码表单

用户名:管理员
密码:'OR name='admin

然后想象你的SQL会是什么样子:

SELECT role FROM user 
WHERE name = 'admin' AND password = '' OR name='admin'

这将返回管理员的角色,即使密码不正确。