我的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'
答案 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来执行此操作。