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

ThinkPHP 3.x 連接 MySQL 資料庫完整步驟教學

     編輯:PHP 綜合知識

環境準備

  • ThinkPHP 3.x 框架
  • MySQL 5.5+ / MariaDB
  • PHP PDO_MySQL 或 MySQLi 擴展已啟用

步驟 1:配置資料庫參數

編輯專案配置檔 Conf/config.php (或分組配置 Conf/Home/config.php):

<?php
return [
    // 資料庫設定
    'DB_TYPE'   => 'mysql',        // 資料庫類型
    'DB_HOST'   => 'localhost',    // 主機地址
    'DB_NAME'   => 'your_db_name', // 資料庫名稱
    'DB_USER'   => 'db_user',      // 用戶名
    'DB_PWD'    => 'db_password',  // 密碼
    'DB_PORT'   => '3306',         // 埠號
    'DB_PREFIX' => 'think_',       // 表前綴
    'DB_CHARSET'=> 'utf8',         // 字元集 (建議 utf8mb4)
    // 進階選項
    'DB_FIELDS_CACHE' => true,     // 啟用欄位快取
    'DB_FIELDTYPE_CHECK' => false, // 關閉欄位型別檢查 (提升效能)
];

注意:生產環境請使用 utf8mb4 完整支援 Emoji,並確保資料庫、表、連線字元集一致。

步驟 2:建立資料表 (對應前綴)

CREATE TABLE `think_user` (
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '用戶名',
    `pwd` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '密碼雜湊',
    `email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '信箱',
    `create_time` INT(11) UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

步驟 3:控制器中操作資料庫

編輯 Lib/Action/IndexAction.class.php:

<?php
class IndexAction extends Action {
    public function index() {
        // 1. 實例化模型 (自動對應 think_user 表)
        $User = M('User'); // 等同 new Model('User')
        
        // 2. 準備資料 (密碼請用 password_hash 加密!)
        $data = [
            'name' => 'liuning',
            'pwd'  => password_hash('asd123', PASSWORD_DEFAULT),
            'email' => 'liuning@example.com',
            'create_time' => time(),
        ];
        
        // 3. 新增資料
        $result = $User->add($data);
        
        if ($result) {
            echo "新增成功,ID: {$result}";
        } else {
            echo "新增失敗: " . $User->getError();
        }
    }
}

關鍵 API 說明

方法說明回傳值
M('User')實例化 Model,自動映射 think_user 表Model 實例
add($data)插入單筆資料新增 ID (自增主鍵) / false
select()查詢多筆二維陣列 / false
find($id)查詢單筆 (主鍵)一維陣列 / false
where($cond)->select()條件查詢二維陣列
save($data)更新資料 (需含主鍵)影響行數 / false
delete($id)刪除資料影響行數 / false

步驟 4:驗證連線與除錯

開啟除錯模式 (入口檔 index.php)

define('APP_DEBUG', true);

除錯模式下,頁面底部會顯示 SQL 查詢日誌、執行時間、記憶體用量。

常見錯誤與解決

錯誤原因解決
SQLSTATE[HY000] [1045] Access denied帳號/密碼/主機錯誤檢查 config.php、MySQL 用戶權限、防火牆
Table 'db.think_user' doesn't exist表未建立或前綴不符確認 DB_PREFIX、執行建表 SQL
PDOException: could not find driverPHP 缺少 pdo_mysql安裝 php-mysql / php-pdo-mysql 擴展
字元集亂碼連線字元集未設定設定 'DB_CHARSET' => 'utf8mb4'

進階:使用模型類別 (Model)

建立 Lib/Model/UserModel.class.php 封裝業務邏輯:

<?php
class UserModel extends Model {
    protected $_validate = [
        ['name', 'require', '用戶名必填'],
        ['name', '', '用戶名已存在', self::EXISTS_VALIDATE, 'unique'],
        ['pwd', 'require', '密碼必填'],
        ['email', 'email', '信箱格式錯誤'],
    ];
    
    protected $_auto = [
        ['create_time', 'time', self::MODEL_INSERT, 'function'],
        ['pwd', 'password_hash', self::MODEL_BOTH, 'function', ['PASSWORD_DEFAULT']],
    ];
    
    public function register($data) {
        if ($this->create($data)) {
            return $this->add();
        }
        return false;
    }
}

控制器簡化為:

$User = D('User'); // 載入 UserModel
$User->register($_POST);

總結

  1. 配置 Conf/config.php 正確的資料庫參數
  2. 建立帶前綴的資料表
  3. 控制器使用 M() 或 D() 實例化模型
  4. 善用 APP_DEBUG 除錯 SQL
  5. 業務邏輯下沉至 Model 類別,控制器保持輕量

遵循此流程,即可快速建立穩健的資料庫操作基礎。

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