我有如下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来执行此操作。