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?

War es hilfreich?

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).

genannt

Wie 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");

http://metacpan.org/pod/DBI#quote

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top