¿Podría alguien decirme si hay una función que funciona igual que la de mysql_real_escape_string()
de PHP para Perl desde el módulo DBI?¿Existe un equivalente de mysql_real_escape_string() de PHP para DBI de Perl?
Respuesta
Debe usar placeholders and bind values.
De 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
Ese es el artículo de Randal Schwartz "Cómo evitar ataques de inyección SQL". Bonito. –
Como quote?
También recomendaría leer la documentación para DBD::MySQL si está preocupado por utf8.
No. Escapar. SQL.
No. Citar. SQL.
Utilice los marcadores/marcadores de posición SQL (?
). La estructura de la declaración SQL y los valores de datos representados por los marcadores de posición se envían a la base de datos completamente por separado (salvo un error en el motor de base de datos o el módulo DBD) no hay forma de que los valores de datos puedan interpretarse como SQL comandos.
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
Como beneficio adicional, el uso de marcadores de posición también es más eficiente si se vuelve a utilizar la instrucción SQL (que sólo tiene que estar preparado una vez) y no menos eficaz si no lo hace (si no lo hace llamada prepararse explícitamente, todavía se llama implícitamente antes de que se ejecute la consulta).
base de datos de la manija Método "cita"
my $dbh = DBI->connect(...);
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
- 1. Java equivalente para mysql_real_escape_string() de PHP
- 2. ¿Cuál es el equivalente Python de DBI de Perl?
- 3. Perl DBI fetchall_hashref
- 4. Perl DBI - Errores de captura
- 5. Acelerar Perl DBI fetchrow_hashref
- 6. ¿Hay PHP mysql_real_escape_string para postgresql?
- 7. Perl equivalente de preg_callback de PHP
- 8. equivalente en Perl de get_file_contents() de PHP
- 9. Perl DBI alternativa a LongReadLen
- 10. ¿Existe un equivalente no global de perlbrew?
- 11. Perl equivalente a escapeshellarg de PHP
- 12. ¿Hay un equivalente PHP de WWW :: Mechanize de Perl?
- 13. ¿Existe un equivalente de print_r de PHP en Ruby/Rails?
- 14. mysql_real_escape_string alternativa para SQL Server
- 15. ¿Existe el equivalente de un conjunto de Java en php?
- 16. ¿Existe un ColdFusion equivalente a PHP para include_once?
- 17. ¿Existe un equivalente para var_dump (PHP) en Javascript?
- 18. ¿Existe una función equivalente de PHP para Python os.path.normpath()?
- 19. Perl DBI sin acceder a la base de datos
- 20. ¿Cómo obtengo los esquemas de DBI de Perl?
- 21. Class :: DBI-like library for php?
- 22. Python equivalente de Perl/Ruby || =
- 23. ¿Cuál es el equivalente en Perl de $ _SERVER de PHP [...]?
- 24. PHP equivalente para un decorador de python?
- 25. Perl, DBI y el delimitador MySQL
- 26. Perl equivalente a PHP bucle foreach
- 27. ¿Cuál es el equivalente de Perl a print_r() de PHP?
- 28. manejo de grandes transacciones largas con perl dbi
- 29. ¿Cómo puedo mostrar el tiempo de consulta en Perl, DBI?
- 30. ¿Cómo puedo manejar unicode con DBI de Perl?
'DBH-> bind()' es el equivalente directo, pero como dice Sinan, no hagas eso. Hágalo correctamente con marcadores de posición y valores de enlace. – mpeters