MySQLi 准备语句良好实践
MySQLi prepare statement good practice
我想看看我的练习是否足以防止 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 注射的最佳实践和最安全方法是什么?
best 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 的精彩功能了
And others that use trim(), intval() etc
这些东西与它无关SQL,您可以出于任何其他原因使用它们。
我想看看我的练习是否足以防止 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 注射的最佳实践和最安全方法是什么?
best 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 的精彩功能了
And others that use trim(), intval() etc
这些东西与它无关SQL,您可以出于任何其他原因使用它们。