我們已經學會了連線資料庫,錯誤偵測,以及下達簡單的 SQL 鈙述的方法. 是該學一些更有用的程式語法的時候了.
SELECT 鈙述
在 SQL 的鈙述中,最常使用的指令莫過於 SELECT 鈙述. 為了使用 SELECT,我們應該先 prepare 這一段鈙述,然後進行 execute 動作. 在下面的程式片段中,我們都會使用 statement handle $sth 有存取 SELECT 的結果.
use strict;
use DBI;
my $dbh = DBI->connect( 'dbi
BMaker:dbsample',
'jerry',
'jeerrypassword',
{
RaiseError => 1,
AutoCommit => 0
}
)
|| die "Database connection not made: $DBI::errstr";
my $sql = qq{ SELECT * FROM employees };
my $sth = $dbh->prepare( $sql );
$sth->execute();
$dbh->disconnect();
上述程式要求 DBMaker 資料庫為查詢指令先準備好執行計畫,之後再執行該查詢指令. 到目前為止還沒有任何一筆記錄傳回. 稍後我們會使用 bind_columns 的技術以取得資料庫輸出的記錄. bind_columns 分別將每個輸出欄位繫結到一個 scalar reference. 一旦呼叫到 fetch 時,這些 scalars 就會填入這資料庫傳回的值.
use strict;
use DBI;
my $dbh = DBI->connect( 'dbi
BMaker:dbsample',
'jerry',
'jerrypassword',
{
RaiseError => 1,
AutoCommit => 0
}
)
|| die "Database connection not made: $DBI::errstr";
my $sql = qq{ SELECT id, name, title, phone FROM employees };
my $sth = $dbh->prepare( $sql );
$sth->execute();
my( $id, $name, $title, $phone );
$sth->bind_columns( undef, \$id, \$name, \$title, \$phone );
while( $sth->fetch() ) {
print "$name, $title, $phone\n";
}
$sth->finish();
$dbh->disconnect();
這倒是一個列印出全公司電話連絡簿的好方法,尤其是 WHERE 區塊的使用讓我們輕易地取出所有的資料輸出! 下面會利用到 bind_param 先將 SQL 鈙述做一次 prepare,就能夠高速地執行許多次.
use strict;
use DBI;
my $dbh = DBI->connect( 'dbi
BMaker:dbsample',
'jerry',
'jerrypassword',
{
RaiseError => 1,
AutoCommit => 0
}
)
|| die "Database connection not made: $DBI::errstr";
my @names = ( "Larry%", "Tim%", "Randal%", "Doug%" );
my $sql = qq{ SELECT id, name, title, phone FROM employees WHERE name LIKE ? };
my $sth = $dbh->prepare( $sql );
for( @names ) {
$sth->bind_param( 1, $_);
$sth->execute();
my( $id, $name, $title, $phone );
$sth->bind_columns( undef, \$id, \$name, \$title, \$phone );
while( $sth->fetch() ) {
print "$name, $title, $phone\n";
}
}
$sth->finish();
$dbh->disconnect();