0
Я довольно новый с PDO. Мне интересно, это теперь безопасно от инъекций SQL?Безопасно ли это от инъекций?
$name = isset($_GET['name']) ? $_GET['name'] : null;
// Fetch some info
$stmt = $db->prepare("SELECT * FROM players WHERE name = ? AND account_id = ?");
$stmt->execute(array($name, $aid));
$row = $stmt->fetch();
if ($row) {
$stmt = $db->prepare("DELETE FROM players WHERE id = ?");
$stmt->execute(array($row['id']));
header("Location: /account");
exit();
} else {
header("Location: /account");
exit();
}
Да. Использование связанных параметров в '?' Предотвращает SQL-инъекцию. Это не означает, что пользователям не удастся удалить записи, которые у них нет разрешения на удаление. Убедитесь, что пользователь, выполнивший это действие, имеет разрешение на значение для 'name'. (Так как мы не можем видеть какой-либо код, связанный с разрешениями - просто хедз-ап) –
Также стоит отметить, что вы можете поместить предложение 'WHERE' из' SELECT' непосредственно на 'DELETE' и добавить' TOP 1 'или' LIMIT 1' в зависимости от ваших dbms, чтобы получить тот же результат с одним запросом. Если вы не находитесь в транзакции pdo, ваш код уязвим для одновременной модификации. – Dan