3

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

4

1 回答 1

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

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

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

于 2012-06-28T14:33:16.257 回答