Existe um equivalente de mysql_real_escape_string () do PHP para DBI do Perl?
-
18-09-2019 - |
Pergunta
Poderia alguns me dizer se existe uma função que funciona da mesma forma do PHP mysql_real_escape_string()
para Perl do DBI módulo?
Solução
Você deve usar espaços reservados e se ligam valores .
Outras dicas
Não faça isso. Escapar. SQL.
Não faça isso. Citar. SQL.
espaços reservados Use SQL / parâmetros (?
). A estrutura da instrução SQL e os valores dos dados representados pelos códigos são enviados para o banco de dados completamente separadamente, para que (com exceção de um bug no mecanismo de banco de dados ou o módulo DBD) não há absolutamente nenhuma maneira que os valores de dados podem ser interpretados 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 um benefício de lado, usando marcadores de posição também é mais eficiente se você reutilizar a instrução SQL (ele só precisa ser preparada uma vez) e não menos eficiente se você não fizer isso (se você não chamá preparar explicitamente, ele ainda é chamado implicitamente antes da consulta é executado).
Como Citação ?
Eu também recomendo a leitura da documentação para DBD :: MySQL se estão preocupados com utf8.
A partir 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
Handle banco de dados Método de "quote"
my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");