占位符在perl DBI中的使用

时间:2012-06-28 14:05:36

标签: mysql perl dbi

我的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'

1 个答案:

答案 0 :(得分:5)

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);
     

在这种情况下,引用方法会自动执行。

如果您有权访问query log,则可以查看查询的内容。如果您的查询需要很长时间,您还可以打开一个mysql控制台并说出SHOW FULL PROCESSLIST;以查看正在运行的查询的列表。这也将包含完整的SQL语句供您查看。在Windows上,您可以使用HeidiSQL来执行此操作。