一、區間查詢
<?php
// AND 關係 (預設)
$data['id'] = [['gt', 4], ['lt', 10]];
// SQL: WHERE (`id` > 4) AND (`id` < 10)
// OR 關係
$data['id'] = [['gt', 4], ['lt', 10], 'or'];
// SQL: WHERE (`id` > 4) OR (`id` < 10)
// 複雜多條件 OR
$data['name'] = [
['like', '%2%'],
['like', '%5%'],
'gege', // 此處原文似為自定義字串,實際應為條件
'or'
];
二、統計查詢
| 方法 | 說明 | 範例 |
| count() | 記錄總數 | $m->count() |
| max($field) | 最大值 | $m->max('score') |
| min($field) | 最小值 | $m->min('score') |
| avg($field) | 平均值 | $m->avg('score') |
| sum($field) | 總和 | $m->sum('amount') |
<?php
$m = M('User');
// 字串條件
$count = $m->where("username='gege'")->count();
// 陣列條件 (推薦,自動防注入)
$data['username'] = 'gege';
$count = $m->where($data)->count();
三、原生 SQL 查詢
1. query():查詢操作 (SELECT)
<?php
$m = M(); // 空模型
$result = $m->query("SELECT * FROM tp_user WHERE id > 50");
var_dump($result); // 成功回傳結果集陣列,失敗回傳 false
2. execute():寫入操作 (INSERT/UPDATE/DELETE)
<?php
$m = M();
$result = $m->execute("INSERT INTO tp_user (username) VALUES ('ztz3')");
var_dump($result); // 成功回傳影響行數,失敗回傳 false
選擇建議
- 標準 CRUD:優先使用鏈式操作
where()->select(),可讀性高、自動防注入
- 複雜報表/跨表關聯:使用
query() 手寫 SQL,發揮資料庫最大效能
- 批次更新/複雜事務:使用
execute() 或 startTrans()/commit()
- 永遠不要拼接 SQL 字串,防止 SQL 注入