简单插入
<pre name="code" class="plain">#!\usr\bin\perl
use warnings;
use strict;
use DBI;
my ($dbh, $rows);
<p style="margin-top: 0px; margin-bottom: 12px; padding-top: 0px; padding-bottom: 0px;">my $dbh = DBI->connect("DBI:Mysql:database=somedb;host=localhost", "user", "pass", {'RaiseError' => 1})<span style="font-family: Arial, Helvetica, sans-serif;"> || </span><span style="font-family: Arial, Helvetica, sans-serif;">die "Error opening database: $DBI::errstr\n";</span></p>$rows=$dbh->do("INSERT INTO checkin VALUES ('John', 'Smith', 'Glasgow')")|| die "Couldn't insert record : $DBI::errstr";
print "$rows row(s) added to checkin\n";
$dbh->disconnect || die "Failed to disconnect\n";
插入变量(批量插入)
每次运行时,查询的格式保持不变,只有输入的值发生变化。要完成这一操作,最佳方法是为INSERT查询建立一个内置DBI“占位符”的模板,然后在每次运行时用实际值来代替占位符。
#!/usr/bin/perl
use DBI;
# create database connection
my $dbh = DBI->connect("DBI:Mysql:database=somedb;host=localhost", "user", "pass", {'RaiseError' => 1});
# prepare template query
my $sth = $dbh->prepare("INSERT INTO users (fname, lname) VALUES (?, ?)");
# execute query with first set of parameters
$sth->execute('John', 'Doe');
# execute query with second set of parameters
$sth->execute('Jane', 'Low');
# close connection
$dbh->disconnect();
建立并执行一个带Perl DBI预编译SQL查询共分四个简单的步骤:
首先调用connect()方法初始化一个数据库句柄。这个方法以一个字符串为连接参数,这个字符串中包括数据库类型(”Mysql”)、主机名称(”localhost”)和数据库名称(”somedb”);并向connect()方法提供用户名(”user”)和密码(”pass”)作为第二和第三自变量。
调用prepare()函数建立SQL查询模板。prepare()中用到的问号为代替实际值的占位符。
调用execute()方法向查询预编译模板中输入实际数据值,把它提交给占位符代替的自变量。注意,这里自变量的顺序十分重要,在上一步中必须为每个占位符定义一个自变量。每次通过一组不同的自变量调用execute()方法,就用相应的值执行一次INSERT查询。
调用disconnect()方法结束会话。
从一个外部文件中批量插入数据,是上述查询的典型应用。这时,首先调用prepare()方法,然后应用一个循环从文件中读入数据,每运行一次循环,即调用execute()方法在数据库中插入一组值。