有人能告诉我是否有一个函数与DBI模块中的mysql_real_escape_string()
Perl 的PHP 相同吗?
问问题
10993 次
5 回答
16
您应该使用占位符和绑定值。
于 2010-02-05T14:52:28.813 回答
9
不。逃脱。SQL。
不。引用。SQL。
使用 SQL 占位符/参数 ( ?
)。SQL语句的结构和占位符所代表的数据值是完全分开发送到数据库的,所以(除非数据库引擎或DBD模块有bug)数据值绝对不能解释为SQL命令。
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
作为一个附带的好处,如果您重新使用您的 SQL 语句(它只需要准备一次),使用占位符也会更有效,如果您不这样做(如果您不显式调用 prepare,它仍然会得到在执行查询之前隐式调用)。
于 2010-02-06T11:02:08.160 回答
5
喜欢报价?
如果您担心 utf8,我还建议您阅读DBD::MySQL的文档。
于 2010-02-05T14:06:12.117 回答
2
来自http://www.stonehenge.com/merlyn/UnixReview/col58.html:
使用 SQL::Abstract; ... 我的 $sqa = SQL::Abstract->new; 我的 ($owner, $account_type) = @_; # 来自输入 我的 ($sql, @bind) = $sqa->select('account_data', # 表 [qw(account_id balance)], # 字段 { account_owner => $所有者, account_type => $account_type }, # “在哪里” ); 我的 $sth = $dbh->prepare_cached($sql); # 如果可以的话,重用 SQL $sth->执行(@bind); # 为这个查询执行它
于 2010-02-05T14:05:36.833 回答
0
数据库句柄方法“报价”
my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
于 2015-11-05T14:25:18.637 回答