占位符在perl DBI中的使用

r.b*_*waj 2 mysql perl dbi

我有perl脚本如下

my $tb = 'rajeev';
$query = 'select * from table where name = ?'
$sth = $dbh->prepare($query);
$sth->execute($tb);

查询执行时,$ tb是否由rajeev或'rajeev'替换?表示查询executs为
select * from table where name = rajeev

select * from table where name = 'rajeev'

sim*_*que 5

DBI为您处理所有转义.在字符串的情况下,它将是'rajeev'.通话select * from table where name = rajeev会给你一个错误.

如果您提供数字,则不会添加引号,因为它们不是必需的.

请参阅DBI文档.它还说:

quote()方法不应与"占位符和绑定值"一起使用.

使用占位符有时会根据您使用的DBD来处理引用.在您的情况下,DBD :: mysql调用$dbh->quote()如文档中所述:

另一种方法是

$dbh->do("INSERT INTO foo VALUES (?, ?)", undef, $number, $name);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,引用方法是自动执行的.

如果您有权访问查询日志,则可以查看查询的外观.如果您的查询需要很长时间,您还可以打开一个mysql控制台,并说SHOW FULL PROCESSLIST;要查看正在运行的查询列表.这也将包含完整的SQL语句供您查看.在Windows上,您可以使用HeidiSQL来完成它.

  • 就个人而言,我要小心不要在任何关于占位符实现方式的描述中混合使用"引用"这个词.许多DBD都没有引用任何内容,它们将占位符完整地传递给SQL,并且在调用execute时分别传递参数,因此没有引用. (5认同)