Qualcuno potrebbe dirmi se esiste una funzione che funziona allo stesso modo di PHP mysql_real_escape_string()
per Perl dal modulo DBI?Esiste un equivalente di mysql_real_escape_string() di PHP per DBI di Perl?
risposta
È necessario utilizzare placeholders and bind values.
Da 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
Questo è l'articolo di Randal Schwartz "Evitare attacchi SQL Injection". Bello. –
come quote?
Vorrei anche leggere la documentazione per DBD::MySQL se siete preoccupati per utf8.
No. Fuga. SQL.
No. Citazione. SQL.
Utilizzare segnaposti/parametri SQL (?
). La struttura dell'istruzione SQL e i valori dei dati rappresentati dai segnaposto vengono inviati al database completamente separatamente, quindi (salvo un bug nel motore del database o nel modulo DBD) non è assolutamente possibile che i valori dei dati possano essere interpretati come SQL comandi.
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
Come beneficio collaterale, usando segnaposti è anche più efficiente se si ri-utilizzare l'istruzione SQL (ha solo bisogno di essere preparati una volta) e non meno efficace se non lo fanno (se non lo fai chiamata preparare in modo esplicito, viene ancora chiamata implicitamente prima dell'esecuzione della query).
Database maniglia Metodo "quote"
my $dbh = DBI->connect(...);
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
- 1. Esiste un equivalente C per il modulo Carpa di Perl?
- 2. Perl equivalente di escapeshellarg di PHP
- 3. Perl equivalente di get_file_contents() di PHP?
- 4. Esiste un python equivalente all'avvio di modulo di perl?
- 5. Perl equivalente del preg_callback di PHP
- 6. Esiste un equivalente Node.js di Perl WWW :: Mechanize?
- 7. C# equivalente di perl $ _
- 8. Esiste un Perl equivalente a `if __name__ == '__main __'` di Python?
- 9. Esiste un equivalente Python dell'operatore x di Perl?
- 10. Esiste un equivalente di hash_hmac di PHP in Python/Django?
- 11. Esiste un equivalente C# di array_key_exists di PHP?
- 12. Esiste un OO Perl equivalente a un'interfaccia?
- 13. Perl DBI alternativa a LongReadLen
- 14. C'è PHP mysql_real_escape_string per postgresql?
- 15. perl dbi riconnettere su disconnessione
- 16. Esiste un equivalente di sprint per node.js
- 17. Python equivalente di Perl/Rubino || =
- 18. Perl equivalente di Ruby's `reject!`?
- 19. Esiste un equivalente di std :: vector in PHP in C++?
- 20. gestisce transazioni di lunga durata con perl dbi
- 21. Esiste un equivalente PHP delle migrazioni di Rails?
- 22. Esiste un equivalente MySQL del preg_replace di PHP?
- 23. Esiste un equivalente di str_replace in C++?
- 24. Esiste un equivalente Java della funzione http_build_query di PHP?
- 25. Esiste un equivalente in C++ della funzione explode() di PHP?
- 26. Esiste un equivalente PHP in sqlite3_limit?
- 27. Esiste un numero intero equivalente di __toString()
- 28. Come posso gestire unicode con DBI di Perl?
- 29. Equivalente Java dell'operatore /// di Perl?
- 30. Qual è l'equivalente Python del DBI di Perl?
'DBH-> bind()' è l'equivalente diretto, ma come dice Sinan, non farlo. Fallo correttamente con i segnaposti e i valori di bind. – mpeters