我有如下perl脚本my $tb = 'rajeev';
$query = 'select * from table where name = ?'
$sth = $dbh->prepare($query);
$sth->execute($tb);

当查询执行时,$tb是否替换为rajeev或'rajeev'?意味着查询执行是select * from table where name = rajeev还是select * from table where name = 'rajeev'

最佳答案

DBI替你处理所有的逃跑。对于字符串,它将是'rajeev'。调用select * from table where name = rajeev将给您一个错误。
如果您提供一个数字,它不会添加引号,因为它们是不需要的。
请参见DBI Doc。它还说:
quote()方法不应与“占位符和绑定值”一起使用。
根据所使用的DBD,使用占位符有时会为您处理报价。在您的情况下,DBD::mysql调用$dbh->quote()如文档中所述:
另一种方法是

$dbh->do("INSERT INTO foo VALUES (?, ?)", undef, $number, $name);

在这种情况下,quote方法将自动执行。
如果您可以访问query log可以检查查询的外观。如果您有需要很长时间的查询,也可以打开mysql控制台并说SHOW FULL PROCESSLIST;以查看正在运行的查询的列表。它还将保存完整的SQL语句供您查看。在Windows上,您可以使用HeidiSQL来执行此操作。

08-08 06:25