Perl 通過 DBI 模組統一資料庫介面,配合 DBD::mysql 驅動實現 MySQL 操作。本文涵蓋連接管理、無返回值操作、自增 ID 獲取、查詢結果遍歷四大核心場景。
my $dbh = DBI->connect(
"DBI:mysql:database=DBname;host=localhost",
"user", "pwd",
{ RaiseError => 1 } # 遇錯自動 die,省去手動檢查
);
# ... 業務邏輯 ...
$dbh->disconnect();
RaiseError => 1 讓異常即時拋出,避免靜默失敗。
my $sth = $dbh->prepare(
"INSERT INTO table_name (Name, region_id, inuse, url)
VALUES (?, ?, ?, ?)"
);
$sth->execute($r_name, $t+1, 1, $r_url);
prepare 一次解析,多次 execute 復用,批量寫入效能更高$sth->execute(); # 執行 INSERT 後
my $new_id = $dbh->{mysql_insertid};
MySQL 專屬屬性,僅在當前連接上下文有效。
my $sth = $dbh->prepare("SELECT col1, col2 FROM table_name WHERE ...");
$sth->execute();
while (my $row = $sth->fetchrow_arrayref) {
printf "%s++%s\n", $row->[0], $row->[1];
}
| 方法 | 返回值 | 適用場景 |
|---|---|---|
| fetchrow_arrayref | 數組引用 [$col1, $col2...] | 高效能,按索引取值 |
| fetchrow_hashref | 哈希引用 {col1=>val, col2=>val} | 按列名取值,可讀性強 |
| fetchall_arrayref | 二維數組引用 [[row1], [row2]...] | 小結果集一次性載入記憶體 |
$dbh->ping 檢測連接存活,斷線重連prepare_cached 緩存語句句柄eval { ... } 包裹,捕獲 $@