Краткий ответ: Всегда используйте подготовленные высказывания.
Длинный ответ:
Подготовленные операторы отделяют ваши данные от команд SQL. Они предоставляются PDO или MySQLi . Их самое большое преимущество в том, что внедрение SQL невозможно, если ваши данные обрабатываются как данные. Еще одним преимуществом является то, что вы можете выполнять один и тот же запрос снова и снова с другим набором данных, что может быть лучше для вашей производительности и часто делает ваш код чище.
Однако бывают случаи, когда вы хотите иметь какой-то динамический запрос, основанный на выборе пользователя или действиях. Как вы, наверное, знаете, имена таблиц и столбцов - это не данные, а часть SQL-запроса, поэтому их нельзя разделять. Тогда альтернатива подготовленным операторам - иметь белый список возможных значений и разрешать проверку пользователя только по белому списку.
Вы можете спросить, для чего подходят query
, real_query
, multi_query
и PDO::exec
?
Как показывает руководство по PHP, они хороши в тех случаях, когда вам нужно только выполнить постоянный запрос без каких-либо переменных или когда у вас есть запрос, который не может быть подготовлен. например,
$mysqli->query('SELECT Name FROM City LIMIT 10');
$pdo->exec('DELETE FROM fruit');
$mysqli->multi_query('DELETE FROM fruit; DELETE FROM pets;');
Что если вы знаете тип и значения ваших данных? Вы также должны подготовить / связать?
Да! Привыкайте связывать все данные, идущие с запросом SQL. Нет причин делать исключения. Гораздо сложнее отследить эти исключения в вашем коде и всегда быть уверенным, что вы не перезаписываете «безопасное» значение каким-то неизвестным вводом.
Если вы все еще не знаете, как использовать подготовленные операторы, или считаете, что они слишком сложные (они не являются), вы можете взглянуть на удивительное руководство по PHP по https://phpdelusions.net