Czy ktoś może mi powiedzieć, czy istnieje funkcja, która działa tak samo, jak PHP mysql_real_escape_string()
dla Perla z modułu DBI?Czy istnieje odpowiednik PHP mysql_real_escape_string() dla DBI Perla?
Odpowiedz
Powinieneś użyć placeholders and bind values.
Od 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
To artykuł Randal Schwartz "Unikanie Ataki SQL Injection". Miły. –
Jak quote?
Polecam również przeczytanie dokumentacji dla DBD::MySQL, jeśli martwisz się o utf8.
Nie. Ucieczka. SQL.
Nie. Zacytować. SQL.
Użyj symboli zastępczych SQL/parametrów (?
). Struktura instrukcji SQL i wartości danych reprezentowane przez symbole zastępcze są wysyłane do bazy danych całkowicie oddzielnie, więc (z wyjątkiem błędu w silniku bazy danych lub module DBD) nie ma absolutnie żadnego sposobu, aby wartości danych mogły być interpretowane jako SQL polecenia.
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
jako korzyść bocznej, przy użyciu symboli zastępczych jest także bardziej efektywne, jeśli ponownie użyć SQL (tylko musi być przygotowany raz) i nie mniej skuteczne, jeśli nie (jeśli nie Zadzwoń, przygotuj się jawnie, wciąż jest wywoływany niejawnie przed wykonaniem zapytania).
Database Uchwyt Metoda "cytat"
my $dbh = DBI->connect(...);
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
- 1. Czy istnieje PHP mysql_real_escape_string dla postgresql?
- 2. Odpowiednik Perla PHP get_file_contents()?
- 3. Czy istnieje odpowiednik MySQL dla PHP preg_replace?
- 4. Class :: DBI-like biblioteka dla php?
- 5. Czy istnieje odpowiednik Perla dla `jeśli __name__ == '__main __'`?
- 6. Czy istnieje odpowiednik javascript. = Dla self concatenating?
- 7. Czy istnieje nieglobalny odpowiednik perlbrew?
- 8. Czy istnieje odpowiednik zestawu Java w php?
- 9. Czy istnieje odpowiednik Java funkcji http_build_query PHP?
- 10. Czy istnieje odpowiednik migracji Railsowych PHP?
- 11. Czy istnieje odpowiednik języka sqlite3_limit w PHP?
- 12. C# odpowiednik perla $ _
- 13. Odpowiednik Java operatora Perla ///?
- 14. Czy istnieje odpowiednik Heroku dla platformy ASP.NET?
- 15. Czy istnieje odpowiednik dla języka erlang?
- 16. Czy istnieje odpowiednik usług IIS dla Tomcat?
- 17. Czy istnieje odpowiednik Python dla HighLine?
- 18. Czy istnieje odpowiednik dla komputerów Mac?
- 19. Czy istnieje odpowiednik WPF dla ToolStripButton?
- 20. Czy istnieje odpowiednik S4 dla opcji unlist()?
- 21. Czy istnieje odpowiednik dplyr dla data.table :: rleid?
- 22. Czy istnieje odpowiednik getBoundingClientRect() dla węzłów tekstowych?
- 23. Czy istnieje odpowiednik css dla "align =" center ""?
- 24. Czy istnieje odpowiednik Perl OO dla interfejsu?
- 25. Czy istnieje odpowiednik HLinta dla Erlanga?
- 26. Czy istnieje odpowiednik jsFiddle dla ASP.NET/VB?
- 27. Czy istnieje odpowiednik sprintf dla node.js
- 28. Czy istnieje odpowiednik numpy.delete() dla macierzy rzadkich?
- 29. Czy istnieje odpowiednik Javascriptu dla Rubiego andand?
- 30. Czy istnieje odpowiednik GAC dla .NET Core?
'DBH-> bind()' jest bezpośrednim odpowiednikiem, ale jak mówi Sinan, nie rób tego. Zrób to poprawnie z symbolami zastępczymi i wartościami wiązania. – mpeters