据我所知,如果我不使用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'
这将返回管理员的角色,即使密码不正确。