我想看看我的练习是否足以防止sql注入。
$mysqli = new mysqli($host,$username,$password,$database);
$query = $mysqli->prepare('SELECT * FROM users WHERE id = ? AND check = ?');
$query->bind_param('ii', $_GET['id'], $_POST['check']);
$query->execute();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
...
}
我已经看到,在某些例子中,在此之前有这条线:
$result = $query->get_result();
其他在$ _GET / $ _ POST中使用trim(),intval()等以确保安全。 哪种方法是避免sql注入的最佳实践和最安全的方法?
答案 0 :(得分:0)
最佳 MySQLi预备声明练习显然是 PDO准备好的声明
您在上面发布的代码毫无意义。为了使它工作,确实你必须使用get_result()函数,唉! - is not guaranteed to be available:
$query = $mysqli->prepare('SELECT * FROM users WHERE id = ? AND check = ?');
$query->bind_param('ii', $_GET['id'], $_POST['check']);
$query->execute();
$result = $query->get_result();
while ($row = $result->fetch_assoc()) {
...
}
使用PDO时,您需要的代码少两倍,始终保证可以正常工作
$query = $pdo->prepare('SELECT * FROM users WHERE id = ? AND check = ?');
$query->execute([$_GET['id'], $_POST['check']]);
while ($row = $query->fetch()) {
...
}
更不用说其他PDO的精彩功能了
其他使用trim(),intval()等
的人
这些东西与SQL无关,你可以出于其他原因使用它们。