編輯專案配置檔 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,並確保資料庫、表、連線字元集一致。
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='用戶表';
編輯 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();
}
}
}
| 方法 | 說明 | 回傳值 |
|---|---|---|
M('User') | 實例化 Model,自動映射 think_user 表 | Model 實例 |
add($data) | 插入單筆資料 | 新增 ID (自增主鍵) / false |
select() | 查詢多筆 | 二維陣列 / false |
find($id) | 查詢單筆 (主鍵) | 一維陣列 / false |
where($cond)->select() | 條件查詢 | 二維陣列 |
save($data) | 更新資料 (需含主鍵) | 影響行數 / false |
delete($id) | 刪除資料 | 影響行數 / false |
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 driver | PHP 缺少 pdo_mysql | 安裝 php-mysql / php-pdo-mysql 擴展 |
| 字元集亂碼 | 連線字元集未設定 | 設定 'DB_CHARSET' => 'utf8mb4' |
建立 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);
Conf/config.php 正確的資料庫參數M() 或 D() 實例化模型APP_DEBUG 除錯 SQL遵循此流程,即可快速建立穩健的資料庫操作基礎。