php - 为什么 Perl DBI 在执行前需要准备语句?

标签 php mysql perl

我目前正在研究一些 Perl 脚本,我对它还很陌生。我遇到了 Perl 的问题,因为我习惯了 MySQL 的 Php 语法,你可以在其中创建你想要的语句然后执行它,然后它将信息发送到服务器端。

但是,使用 Perl 和 DBI 模块,它需要您创建语句、准备语句,然后执行语句并将信息发送到服务器端。

是不是因为Perl类似于高级编程语言,内部有一个实用的编译器,所以在执行前需要这个prepare语句?

我正在使用 MySQL 更新语句,它是否特定于语句(更新与选择)?

当我说“创建声明”时,我的意思是:

$query = "UPDATE table SET column = value";

也许我对这个主题没有做足够的研究?

最佳答案

您实际上不必直接使用prepare(有一些快捷方式。)但使用它可以让您告诉数据库驱动程序有关可以重复执行的单个语句,而无需数据库每次都重新编译它。例如

my @records = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8 9 ] );
my $sth = $dbh->prepare( "INSERT INTO foo VALUES ( ?, ?, ? )" );
foreach my $record( @records ) { 
    $sth->execute( @$record );
}

这将执行相同的预准备语句三次,一次用于 @records 中的每组三个值。这也演示了 ? 占位符的使用,您应该始终使用它而不是将变量直接插入到 SQL 字符串中。

如果只需要执行一次语句,可以将准备语句和执行语句合并为一个步骤:

$dbh->do( "INSERT INTO foo VALUES ( ?, ?, ? )", undef, 1, 2, 3 );

第一个参数是 SQL 字符串(最好使用占位符),第二个参数是可选的属性散列(此处为 undef),其余参数是占位符的替代项。

关于php - 为什么 Perl DBI 在执行前需要准备语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910816/

相关文章:

regex - 如何替换正则表达式匹配并在 Perl 中映射替换?

php - 如何修复 mysqli_fetch_array?我使用 php、mysqli 和 html

php - 将特色图片添加到自定义帖子类型

mysql - 解析 R 数据帧的 JSON 列

mysql - SQL 方程当前减去其他年份?

perl - perl 中 STDOUT 的别名文件句柄

multithreading - 如何限制 perl 中的最大并行线程数

php - 使用 php 显示 .txt 文件的内容

php - 关于 PHP 中的 `array_reduce` 和匿名函数的问题

php - 如何按日期获取最后一条记录,但数据类型为 varchar