Не. Побег. SQL.
Не. Quote. SQL.
Использовать заполнители / параметры SQL (?
). Структура оператора SQL и значения данных, представленные заполнителями, отправляются в базу данных совершенно отдельно, поэтому (за исключением ошибки в модуле базы данных или модуле DBD) абсолютно невозможно, чтобы значения данных можно было интерпретировать как SQL команды.
my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name); # Finds Little Bobby Tables without harming the db
В качестве дополнительного преимущества использование заполнителей также более эффективно, если вы повторно используете оператор SQL (его нужно подготовить только один раз), и не менее эффективно, если вы этого не сделаете (если вы не вызываете метод prepare явно, он по-прежнему вызывается неявно до выполнения запроса).