Gibt es ein Äquivalent von PHP mysql_real_escape_string () für Perl DBI?
-
18-09-2019 - |
Frage
Könnten einige sagen Sie mir, wenn es eine Funktion ist, die die gleiche wie PHP funktioniert mysql_real_escape_string()
für Perl von der DBI Modul?
Lösung
Sie sollten verwenden Platzhalter und binden Werte .
Andere Tipps
Nicht. Flucht. SQL.
Nicht. Zitat. SQL.
Verwenden Sie SQL Platzhalter / Parameter (?
). Die Struktur der SQL-Anweisung und die Daten, die durch die Platzhalter dargestellten Werte werden in die Datenbank vollständig separat gesendet werden, so (Sperre einen Fehler in der Datenbank-Engine oder das DBD-Modul) gibt es absolut keine Möglichkeit, dass die Datenwerte können als SQL interpretiert werden Befehle.
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
Als Nebeneffekt, Platzhalter verwenden ist auch effizienter, wenn Sie Ihre SQL-Anweisung wieder verwenden (es muss nur bereit sein, einmal) und nicht weniger effizient, wenn Sie dies nicht tun (wenn Sie rufen Sie nicht explizit vorbereiten, es wird noch implizit, bevor die Abfrage ausgeführt wird).
genanntWie Zitat ?
Ich würde auch empfehlen, die Dokumentation zu lesen für DBD :: MySQL , wenn Sie sind besorgt über UTF-8.
http://www.stonehenge.com/merlyn/UnixReview/col58. html :
use SQL::Abstract; ... my $sqa = SQL::Abstract->new; my ($owner, $account_type) = @_; # from inputs my ($sql, @bind) = $sqa->select('account_data', # table [qw(account_id balance)], # fields { account_owner => $owner, account_type => $account_type }, # "where" ); my $sth = $dbh->prepare_cached($sql); # reuse SQL if we can $sth->execute(@bind); # execute it for this query
Datenbank Handle-Methode "Zitat"
my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");