首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 入門系列:Perl DBI 基礎(一)

     編輯:MySQL 資料庫相關知識

DBI 核心概念:句柄與資料結構

Perl DBI(Database Interface)與 C API 思維相似:透過句柄(handle,即引用)操作底層物件(object)。慣用變數命名:

  • $dbh:資料庫句柄
  • $sth:陳述句柄(查詢)
  • $fh:檔案句柄
  • $h:通用句柄

非句柄變數慣例:$rc(布林回傳)、$rv(整數回傳)、$rows(影響行數)、@ary(單行資料陣列)。

第一支 DBI 腳本:dump_members

腳本連線 MySQL、執行 SELECT、逐行列印會員資料(Tab 分隔)。關鍵步驟:

  1. use DBI; use strict; —— 引入模組並啟用嚴格模式(強制變數宣告,避免拼字錯誤)。
  2. 定義連線參數(主機、資料庫、用戶、密碼)。
  3. DBI->connect($dsn, $user, $pass, {RaiseError => 1}) —— 連線並啟用 RaiseError,錯誤自動 die,無需手動檢查每個呼叫。
  4. $sth = $dbh->prepare($sql) —— 預備陳述句,回傳 $sth。
  5. $sth->execute() —— 執行查詢。
  6. while (@row = $sth->fetchrow_array()) { ... } —— 逐行取得陣列,無資料回傳空陣列結束迴圈。
  7. $sth->finish()、$dbh->disconnect() —— 釋放資源並斷線。

注意:DBI 查詢字串不需分號結尾,否則會語法錯誤。

錯誤處理三種模式

模式屬性設定行為
預設RaiseError=>0, PrintError=>1warn() 訊息並繼續執行,需自行檢查回傳值(如 or exit(1))。
自動終止RaiseError=>1錯誤即 die() 退出,最省事(dump_members 採用)。
自行處理RaiseError=>0, PrintError=>0完全自控,透過 $DBI::err、$DBI::errstr 取得錯誤碼與訊息,自行決定輸出與流程。

亦可自訂 $SIG{__DIE__} 改寫 RaiseError 的預設輸出,或用屬性雜湊 {RaiseError=>1} 讓程式碼更易讀。

非查詢語句:do() 方法

INSERT、UPDATE、DELETE 等不回傳結果集的語句,可用 $dbh->do($sql) 一步完成預備與執行。回傳影響行數(數值語境下 "0E0" 視為真,方便區別 undef 錯誤)。等價於 prepare() + execute()。

結果集處理:四種取行方式

方法回傳值適用場景
fetchrow_array()值陣列 (@row)簡單列印、需按順序解包到具名變數 ($name, $email) = $sth->fetchrow_array()。
fetchrow_arrayref()陣列參考 $ary_ref效率較高,存取用 $ary_ref->[$i],需自行檢查 undef 避免 @{undef} 錯誤。
fetch()同 fetchrow_arrayref()別名。
fetchrow_hashref()雜湊參考 $hash_ref(鍵為欄位名)不依賴欄位順序,程式碼可讀性最佳,適合傳遞給不關心 SQL 選欄順序的函式。

所有方法在無資料時回傳 undef(或空陣列),迴圈條件自然終止。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved