#!/usr/bin/perl 指定解釋器路徑(需根據實際環境調整)chmod +x script.pl 賦予執行權限perl script.pl 運行use DBI; # 必須,載入 DBI 架構
use strict; # 強制變量聲明,捕獲拼寫錯誤
#!/usr/bin/perl
# dump_members.pl - 導出歷史同盟會員列表
use DBI;
use strict;
# 連接參數(建議從配置文件讀取,見後文)
my $dsn = "DBI:mysql:database=sampdb;host=localhost";
my $user = "sampadm";
my $password = "secret";
# 連接,啟用 RaiseError 自動拋出異常
my $dbh = DBI->connect($dsn, $user, $password, { RaiseError => 1 })
or die "Connect failed: $DBI::errstr";
# 準備並執行查詢
my $sth = $dbh->prepare(q{
SELECT last_name, first_name, suffix, email,
street, city, state, zip, phone
FROM member ORDER BY last_name
});
$sth->execute();
# 逐行獲取並輸出(製表符分隔)
while (my @row = $sth->fetchrow_array()) {
print join("\t", @row), "\n";
}
# 清理
$sth->finish();
$dbh->disconnect();
exit 0;
| 變量 | 含義 |
|---|---|
$dbh | Database Handle - 數據庫連接句柄 |
$sth | Statement Handle - 預處理語句句柄 |
$fh | File Handle - 文件句柄 |
$h | 通用句柄 |
$rc | 返回碼(布爾) |
$rv | 返回值(整數) |
$rows | 影響行數 |
@ary | 單行數組 |
| 模式 | 連接參數 | 行為 |
|---|---|---|
| 自動異常(推薦) | {RaiseError=>1} | 出錯自動 die,無需手動檢查 |
| 警告不退出 | {PrintError=>1} | warn 但繼續執行 |
| 手動檢查 | {RaiseError=>0,PrintError=>0} | 需檢查 $DBI::err/errstr |
# 自定義錯誤處理器
$SIG{__DIE__} = sub { die "抱歉,發生錯誤\n"; };
DBI:mysql:db_name、DBI:mysql:db_name:host、DBI:mysql:db_name:host:portDBI_DSN、DBI_USER、DBI_PASSmysql_read_default_file=/path/.my.cnf 或 mysql_read_default_group=client--host、--user、--password 覆蓋配置文件my $dsn = "DBI:mysql:;mysql_read_default_file=$ENV{HOME}/.my.cnf;mysql_read_default_group=dbi";
my $dbh = DBI->connect($dsn, undef, undef, { RaiseError => 1 });
print "$sql\n" 對比手工執行與腳本執行的差異DBI->trace(2, 'trace.log') 或 $sth->trace(2)export DBI_TRACE=2=trace.log$sth->{NAME}:列名數組引用$sth->{NUM_OF_FIELDS}:列數$sth->{mysql_max_length}:每列最大顯示寬度(MySQL 專有)可構建類似 mysql 客戶端的表格輸出、動態列展示等功能。
Perl DBI 提供了成熟、穩健的 MySQL 交互接口。掌握 connect/prepare/execute/fetch/disconnect 生命週期、錯誤處理模式、佔位符與參數綁定、配置文件解耦、Trace 調試,即可編寫可維護的生產級腳本。