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

ThinkPHP 3.2.3 資料庫配置新特性完整指南(PDO 重寫版)

     編輯:PHP 綜合知識

前言

ThinkPHP 3.2.3 資料庫層全面採用 PDO 重寫,配置系統大幅重構,移除舊有快取機制,新增調試模式、Lite 模式、分佈式部署等企業級特性。本文系統整理所有配置參數與最佳實踐。

完整配置參數對照表

參數說明預設值備註
DB_TYPE資料庫類型mysql支援 mysql/sqlite/oracle/pgsql/sqlsrv/firebird
DB_HOST伺服器地址127.0.0.1建議用 IP 避免 DNS 解析延遲
DB_NAME資料庫名稱-必填
DB_USER使用者名稱-必填
DB_PWD密碼-必填
DB_PORT連接埠3306空值則用驅動預設
DB_PREFIX資料表前綴空如 think_
DB_CHARSET字元集utf8建議 utf8mb4 支援 Emoji
DB_PARAMSPDO 連線參數陣列[]傳遞給 PDO 建構子第 4 參數
DB_DEBUG資料庫調試模式true獨立於 APP_DEBUG,開啟記錄 SQL 日誌
DB_LITE輕量模式false開啟後僅支援原生 SQL 查詢,效能較高
DB_FIELDS_CACHE欄位資訊快取true減少 DESC TABLE 查詢
DB_DEPLOY_TYPE部署類型00=集中式(單機), 1=分佈式(主從)
DB_RW_SEPARATE讀寫分離false需 DB_DEPLOY_TYPE=1 才生效
DB_MASTER_NUM主庫數量1讀寫分離時的主庫數
DB_SLAVE_NO指定從庫序號空空則隨機/輪詢

已移除的 3.2.2 參數

  • DB_FIELDTYPE_CHECK → 強制開啟欄位類型檢查
  • DB_SQL_BUILD_CACHE、DB_SQL_BUILD_QUEUE、DB_SQL_BUILD_LENGTH → SQL 建構快取機制移除
  • DB_SQL_LOG → 由 DB_DEBUG 取代
  • DB_BIND_PARAM → PDO 自動參數綁定,無需配置

標準單機配置範例

<?php
// Application/Common/Conf/config.php
return [
    // 資料庫配置
    'DB_TYPE'               => 'mysql',
    'DB_HOST'               => '192.168.1.100',
    'DB_NAME'               => 'thinkphp',
    'DB_USER'               => 'root',
    'DB_PWD'                => 'secure_password',
    'DB_PORT'               => '3306',
    'DB_PREFIX'             => 'tp_',
    'DB_CHARSET'            => 'utf8mb4',
    'DB_DEBUG'              => true,        // 開發環境開啟
    'DB_FIELDS_CACHE'       => true,
    'DB_LITE'               => false,       // 關閉以使用查詢構建器
    
    // PDO 額外參數(可選)
    'DB_PARAMS'             => [
        PDO::ATTR_PERSISTENT => false,      // 非持久連線(PHP-FPM 建議關閉)
        PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
    ],
];
?>

模型中獨立配置資料庫連線(三種方式)

方式一:陣列配置(推薦,清晰)

<?php
namespace Home\Model;
use Think\Model;

class UserModel extends Model {
    protected $connection = [
        'db_type'  => 'mysql',
        'db_host'  => '192.168.1.200',  // 不同伺服器
        'db_user'  => 'readonly_user',
        'db_pwd'   => 'readonly_pass',
        'db_name'  => 'thinkphp_replica',
        'db_port'  => '3306',
        'db_charset' => 'utf8mb4',
    ];
}
?>

方式二:DSN 字串(簡潔)

<?php
class OrderModel extends Model {
    // 格式:類型://用戶:密碼@主機:埠/資料庫#字元集
    protected $connection = 'mysql://readonly_user:readonly_pass@192.168.1.200:3306/thinkphp_replica#utf8mb4';
}
?>

方式三:引用全域配置項(可維護性最佳)

<?php
// 配置檔中定義命名連線
'DB_CONFIG_READONLY' => [
    'db_type' => 'mysql',
    'db_host' => '192.168.1.200',
    'db_user' => 'readonly_user',
    'db_pwd'  => 'readonly_pass',
    'db_name' => 'thinkphp_replica',
    'db_port' => '3306',
    'db_charset' => 'utf8mb4',
],

'DB_CONFIG_REPORT' => 'mysql://report_user:pass@192.168.1.201:3306/report_db#utf8mb4';

// 模型中引用
class ReportModel extends Model {
    protected $connection = 'DB_CONFIG_REPORT'; // 字串引用配置項
}
?>

動態切換連線(執行時)

<?php
// M 方法第三個參數指定連線
$User = M('User', 'other_', 'mysql://user:pass@host:3306/db#utf8');
// 或引用配置名
$User = M('User', 'other_', 'DB_CONFIG_READONLY');

// 實例化後切換(進階)
$Model = new Home\Model\UserModel();
$Model->setConnection('DB_CONFIG_READONLY'); // Think\Model 方法
?>

主從分佈式配置範例

<?php
return [
    'DB_DEPLOY_TYPE'    => 1,           // 1 = 分佈式
    'DB_RW_SEPARATE'    => true,        // 啟用讀寫分離
    'DB_MASTER_NUM'     => 1,           // 1 個主庫
    'DB_SLAVE_NO'       => '',          // 空 = 自動負載均衡
    
    // 主庫配置
    'DB_HOST'           => '192.168.1.10',   // 主庫寫入
    'DB_USER'           => 'master_user',
    'DB_PWD'            => 'master_pass',
    
    // 從庫配置(陣列,支援多台)
    'DB_SLAVE'          => [
        ['host' => '192.168.1.11', 'user' => 'slave_user', 'pwd' => 'slave_pass'],
        ['host' => '192.168.1.12', 'user' => 'slave_user', 'pwd' => 'slave_pass'],
    ],
    
    // 共用配置
    'DB_NAME'           => 'thinkphp',
    'DB_PORT'           => '3306',
    'DB_PREFIX'         => 'tp_',
    'DB_CHARSET'        => 'utf8mb4',
];
?>

調試模式獨立控制(3.2.3 新特性)

<?php
// 開發環境:同時開啟
define('APP_DEBUG', true);   // 應用調試
// config: 'DB_DEBUG' => true,  // SQL 日誌

// 生產環境:關閉應用調試,但可單獨開啟 SQL 監控
define('APP_DEBUG', false);
// config: 'DB_DEBUG' => true,  // 僅記錄慢查詢/錯誤 SQL

// 獲取執行的 SQL(需 DB_DEBUG=true)
$Model = M('User');
$Model->where('id', 1)->find();
echo $Model->getLastSql(); // 輸出最後執行的 SQL
?>

遷移檢查清單(3.2.2 → 3.2.3)

項目3.2.23.2.3動作
驅動mysql/mysqli/pdo統一 PDO移除舊驅動配置
調試綁定 APP_DEBUG獨立 DB_DEBUG分離配置
SQL 快取支援移除改用 Redis/資料層快取
參數綁定手動配置PDO 自動移除 DB_BIND_PARAM
字元集utf8建議 utf8mb4更新 DB_CHARSET

ThinkPHP 3.2.3 的 PDO 重寫奠定了現代化資料庫存取基礎,配置系統更靈活、功能更完整,是 TP3 系列中最穩定、功能最豐富的版本。

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