0

Здравствуйте. Недавно начал изучать PDO Mysql. Столкнулся с таким вопросом, пишу файл личных страниц для пользователей, и делаю выборку из БД. Хотел уточнить, нужно ли фильтровать переменную $_GET['username'] или же достаточно прогнать через bindParam? Не получится ли SQL Inj? Спасибо)

$stmt = $db->prepare('SELECT `id`, `username` FROM `accounts` WHERE `username` = :username LIMIT 1');
$stmt->bindParam(':username', $_GET['username'], PDO::PARAM_STR);
$stmt->execute();
VaDoSiQ
  • 39
  • isset($_GET['username']) как минимум нужен, чтобы убедиться, что переменная вообще есть в наличии. – Visman Jan 11 '18 at 09:17
  • Вот так подойдет? $username = isset($_GET['username']); $stmt = $db->prepare('SELECT id, username FROM accounts WHERE username = :username LIMIT 1'); $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->execute(); – VaDoSiQ Jan 11 '18 at 09:20
  • http://php.net/manual/ru/function.isset.php if (! isset($_GET['username'])) {exit('Пошли на фиг! С новым годом!');} в начале скрипта, который использует $_GET['username'] P.S. Прежде чем использовать какие-то данные пришедшие со стороны, нужно проверить их наличии как минимум. Как максимум - прогнать через валидатор. – Visman Jan 11 '18 at 09:29
  • Ну а фильтрация нужна? В случае с $_GET['id'] нужна фильтрация intval($_GET['id']) – VaDoSiQ Jan 11 '18 at 09:34
  • Инъекция исключена в любом случае. За это можете не беспокоится. Дополнительные проверки в общем то нужны только для того что бы запрос (или скрипт целиком) не завершился с ошибкой, а была возможность дать пользователю более вразумительное сообщение об ошибке – Mike Jan 11 '18 at 09:58
  • Почитайте ответы на этот вопрос https://ru.stackoverflow.com/q/637185/186083 – Visman Jan 11 '18 at 09:58

0 Answers0