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

Zend Framework 連接 MySQL 數據庫:工廠模式與配置驅動兩種方式

     編輯:MySQL 資料庫相關知識

Zend Framework 1.x 通過 Zend_Db 組件提供統一數據庫抽象層。本文介紹兩種主流連接方式:參數直連與配置文件驅動。

方式一:參數直連(快速原型)

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'root',
    'password' => '123456',
    'dbname'   => 'mysql'
));
  • 返回 Zend_Db_Adapter_Pdo_Mysql 實例
  • 適合腳本、測試、簡單應用
  • 憑證硬編碼,不利於環境隔離

方式二:配置文件驅動(生產標準)

1. 配置文件 config.ini

[main]
db.adapter = PDO_MYSQL
db.host = 127.0.0.1
db.username = root
db.password = 123456
db.dbname = myapp
db.profiler.enabled = true
db.profiler.class = Zend_Db_Profiler_Firebug

2. 應用啟動加載

$config = new Zend_Config_Ini('config.ini', 'main');  // 解析 main 節
$params = $config->db->toArray();  // 轉為數組

// 可選:註冊 Profiler
if (isset($params['profiler'])) {
    $profilerConfig = $params['profiler'];
    unset($params['profiler']);
    $profiler = new $profilerConfig['class']($profilerConfig);
    $params['profiler'] = $profiler;
}

$db = Zend_Db::factory($params['adapter'], $params);
Zend_Db_Table::setDefaultAdapter($db);  // 設為 Table Gateway 默認適配器

進階用法

事務管理

$db->beginTransaction();
try {
    $db->insert('users', ['name' => 'A']);
    $db->update('users', ['status' => 1], 'id = 1');
    $db->commit();
} catch (Exception $e) {
    $db->rollBack();
    throw $e;
}

預處理語句(防注入)

$sql = "SELECT * FROM users WHERE status = ? AND created_at > ?";
$stmt = $db->query($sql, [1, '2024-01-01']);
$rows = $stmt->fetchAll();

Profiler 性能分析

$profiler = $db->getProfiler();
$profiles = $profiler->getQueryProfiles();
foreach ($profiles as $profile) {
    echo $profile->getQuery() . ' -- ' . $profile->getElapsedSecs() . "s\n";
}

遷移提示:ZF1 → ZF3 / Laminas

  • Zend_Db 在 ZF3/Laminas 中已分離為 laminas-db 組件
  • 推薦使用 Laminas\Db\Adapter\Adapter + Laminas\Db\Sql 新 API
  • PDO 選項標準化:'driver' => 'Pdo_Mysql' → 'driver' => 'Pdo\Mysql'

配置驅動模式實現環境隔離、憑證安全、性能可觀測,是 Zend Framework 應用的標準姿勢。

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