首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Zend_Db + PDO 連接 MySQL 完整實戰:工廠模式建立連線、註冊容器、Model/Controller 分層範例

     編輯:MySQL 綜合教學

環境準備

  1. php.ini 載入 PDO 擴展:
    extension=php_pdo.dll
    extension=php_pdo_mysql.dll
  2. extension_dir 指向正確目錄(如 C:\php5\ext)
  3. 重啟 Web 伺服器

入口檔 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);  // 註冊至全域註冊表
?>

Model 層 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);
    }
}
?>

Controller 層 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()

遷移至現代 Zend Framework 3 / Laminas 建議

  • 使用 Laminas\Db\Adapter\Adapter 替代 Zend_Db
  • 依賴注入容器 (PSR-11) 替代 Zend::register
  • 中介軟體管線替代單一入口 index.php

Zend_Db + PDO 以工廠模式、註冊器、參數化查詢構建清晰分層架構,是 PHP 早期 MVC 專案的經典範式。

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