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

ThinkPHP 數據查詢與模板遍歷實戰:從 DSN 配置到模板輸出

     編輯:PHP 綜合知識

ThinkPHP 數據庫操作入門:Model 查詢、數組賦值與模板遍歷完整流程

ThinkPHP 的 ORM 機制讓數據庫操作極其簡潔。本文從數據庫配置入手,演示 M() 實例化模型、select() 查詢、模板變量賦值、前端遍歷輸出的標準化流程,並介紹調試模式下的 SQL 監控技巧。

數據庫配置方式對比

<?php
// config.php - 方式一:分項配置(推薦清晰度)
return [
    'DB_TYPE'   => 'mysql',
    'DB_HOST'   => 'localhost',
    'DB_NAME'   => 'thinkphp',
    'DB_USER'   => 'root',
    'DB_PWD'    => '',
    'DB_PORT'   => 3306,
    'DB_PREFIX' => 'tp_',  // 表前綴
];

// 方式二:DSN 字符串(優先級高於分項配置)
'DB_DSN' => 'mysql://root:@localhost:3306/thinkphp';

模型實例化與查詢

<?php
class IndexAction extends Action {
    public function index() {
        // 1. 實例化模型 (對應 tp_user 表)
        $User = M('User');  // 等同 new Model('User'),表名首字母大寫
        
        // 2. 查詢數據
        $data = $User->select();  // 返回二維數組
        
        // 3. 賦值給模板
        $this->assign('list', $data);
        
        // 4. 渲染模板
        $this->display();
    }
}
?>

CURD 核心方法速查

操作方法說明
增 (Create)add($data)插入數據,返回自增 ID
刪 (Delete)delete($pk)按主鍵刪除,支持數組批量刪除
改 (Update)save($data)更新數據,需包含主鍵值
查 (Read)select()查詢多條,返回二維數組
查 (Read)find($pk)查詢單條,返回一維數組

模板遍歷輸出

<!-- Tpl/Index/index.html -->
<table border="1" cellpadding="5">
    <tr><th>ID</th><th>用戶名</th><th>性別</th></tr>
    <volist name="list" id="vo">
    <tr>
        <td><{$vo.id}></td>
        <td><{$vo.username}></td>
        <td><{$vo.sex}></td>
    </tr>
    </volist>
</table>

關鍵語法:

  • name="list":模板變量名(assign 的鍵)
  • id="vo":循環變量名,當前行數據對象
  • <{$vo.field}>:輸出字段值(ThinkPHP 模板標簽用 <{ }> 包裹)

調試模式:SQL 監控與性能分析

1. 開啟調試 (index.php)

define('APP_DEBUG', true);

2. 開啟頁面 Trace (config.php)

'SHOW_PAGE_TRACE' => true,

3. Trace 面板功能

  • SQL 日誌:顯示本次請求執行的所有 SQL、耗時、影響行數
  • 執行流程:路由解析、控制器初始化、Action 執行、模板渲染各階段耗時
  • 文件加載:加載的文件列表、大小、包含關係
  • 變量值:$_GET/$_POST/$_SESSION/模板變量等
  • 錯誤信息:E_NOTICE/E_WARNING 等級別錯誤

進階查詢技巧

<?php
$User = M('User');

// 條件查詢
$User->where('status=1 AND age>18')->select();
$User->where(['status'=>1, 'age'=>['gt',18]])->select();

// 排序、限制
$User->order('id DESC')->limit(10)->select();
$User->order('create_time DESC')->page(2, 20)->select(); // 分頁

// 字段選擇
$User->field('id,username,email')->select();

// 統計
$User->where('status=1')->count();
$User->max('score');
$User->sum('balance');

// 原生 SQL
$User->query("SELECT * FROM tp_user WHERE id > ?", [100]);
$User->execute("UPDATE tp_user SET login_count = login_count + 1 WHERE id = ?", [1]);

常見問題排查

現象原因解決
select() 返回空數組表名大小寫不匹配 / 表前綴錯誤 / 無數據檢查 M('User') 對應 tp_user 表、數據庫實際表名
模板變量不顯示assign 鍵名與模板 name 不一致統一變量名,使用 <{$Think.get.list|var_dump}> 調試
SQL 不顯示在 Trace未開啟 APP_DEBUG 或 SHOW_PAGE_TRACE雙重確認兩個常量均為 true

最佳實踐建議

  1. 表名規範:數據庫表統一小寫下劃線 tp_user_info,模型調用 M('UserInfo')
  2. 字段選擇:避免 SELECT *,明確指定 field() 減少傳輸開銷
  3. 調試習慣:開發期始終開啟 Trace,關注慢 SQL(>0.1s) 與 N+1 查詢問題
  4. 模板分離:邏輯層只準備數據,模板層只負責展示,不在模板中寫複雜 PHP 代碼

掌握「配置 → 模型 → 查詢 → 賦值 → 遍歷」這條核心鏈路,是 ThinkPHP 開發的基石,也是從新手邁向熟練開發者的必經之路。

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