我有perl脚本如下
my $tb = 'rajeev';
$query = 'select * from table where name = ?'
$sth = $dbh->prepare($query);
$sth->execute($tb);
查询执行时,$ tb是否由rajeev或'rajeev'替换?表示查询executs为
select * from table where name = rajeev
或select * from table where name = 'rajeev'
DBI为您处理所有转义.在字符串的情况下,它将是'rajeev'.通话select * from table where name = rajeev会给你一个错误.
如果您提供数字,则不会添加引号,因为它们不是必需的.
请参阅DBI文档.它还说:
quote()方法不应与"占位符和绑定值"一起使用.
使用占位符有时会根据您使用的DBD来处理引用.在您的情况下,DBD :: mysql调用$dbh->quote()如文档中所述:
另一种方法是
Run Code Online (Sandbox Code Playgroud)$dbh->do("INSERT INTO foo VALUES (?, ?)", undef, $number, $name);在这种情况下,引用方法是自动执行的.
如果您有权访问查询日志,则可以查看查询的外观.如果您的查询需要很长时间,您还可以打开一个mysql控制台,并说SHOW FULL PROCESSLIST;要查看正在运行的查询列表.这也将包含完整的SQL语句供您查看.在Windows上,您可以使用HeidiSQL来完成它.