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 實例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
$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 = $db->getProfiler();
$profiles = $profiler->getQueryProfiles();
foreach ($profiles as $profile) {
echo $profile->getQuery() . ' -- ' . $profile->getElapsedSecs() . "s\n";
}
Zend_Db 在 ZF3/Laminas 中已分離為 laminas-db 組件Laminas\Db\Adapter\Adapter + Laminas\Db\Sql 新 API'driver' => 'Pdo_Mysql' → 'driver' => 'Pdo\Mysql'配置驅動模式實現環境隔離、憑證安全、性能可觀測,是 Zend Framework 應用的標準姿勢。