php.ini 載入 PDO 擴展:extension=php_pdo.dll
extension=php_pdo_mysql.dllextension_dir 指向正確目錄(如 C:\php5\ext)index.php(唯一進入點)<?php
$params = array(
'host' => '127.0.0.1',
'username' => 'root',
'password' => '123456',
'dbname' => 'happycms'
);
$db = Zend_Db::factory('Pdo_Mysql', $params);
Zend::register('db', $db); // 註冊至全域註冊表
?>
lib/App/Article.php<?php
class App_Article {
private $db;
public function __construct() {
$this->db = Zend::registry('db');
}
public function listAll() {
$result = $this->db->query('SELECT * FROM article');
$rows = $result->fetchAll();
Zend::dump($rows); // 除錯輸出
return $rows;
}
public function listByCategory($catId) {
// 參數化查詢範例
return $this->db->fetchAll('SELECT * FROM article WHERE category_id = ?', $catId);
}
}
?>
ArticleController.php<?php
class ArticleController extends Zend_Controller_Action {
private $view;
private $article;
public function __construct() {
$this->view = Zend::registry('view');
$this->article = new App_Article();
}
public function listAllAction() {
$this->article->listAll();
$this->view->title = 'View Articles';
echo $this->view->render(TPL_DIR . '/tplView.php');
}
public function __call($action, $arguments) {
$this->_redirect('./'); // 未定義 action 導回首頁
}
}
?>
訪問 https://host/article/listall 觸發 listAllAction,輸出文章列表陣列。
array(1) {
[0]=> array(15) {
["articleid"]=> string(1) "1"
["categoryid"]=> string(1) "0"
["articletitle"]=> string(4) "test"
["articlefromwhere"]=> string(3) "sdf"
["articlekeywords"]=> string(5) "sdfds"
["articledescription"]=> string(4) "test"
["articlebody"]=> string(9) "sffsdfsdf"
["authorname"]=> string(8) "haohappy"
["authoremail"]=> string(11) "s...@df.com"
["issticky"]=> string(1) "0"
["isrecommanded"]=> string(1) "0"
["includeattachment"]=> string(1) "0"
["addtime"]=> string(19) "0000-00-00 00:00:00"
["lastedittime"]=> string(19) "0000-00-00 00:00:00"
["checktime"]=> string(19) "0000-00-00 00:00:00"
}
}
| 實務 | 代碼體現 |
|---|---|
| 工廠模式建立連線 | Zend_Db::factory('Pdo_Mysql', $params) |
| 依賴註冊器解耦 | Zend::register('db', $db) / Zend::registry('db') |
| 參數化查詢防注入 | fetchAll('SELECT ... WHERE id = ?', $id) |
| Model 封裝資料邏輯 | App_Article::listAll() |
| Controller 薄化僅負責調度 | ArticleController::listAllAction() |
Laminas\Db\Adapter\Adapter 替代 Zend_DbZend::registerindex.phpZend_Db + PDO 以工廠模式、註冊器、參數化查詢構建清晰分層架構,是 PHP 早期 MVC 專案的經典範式。