1.連接數據庫
Thinlphp內置了抽象數據庫訪問層,把不同的數據操作封裝起來。我們只需要調用公共的DB類進行操作即可。DB類會自動調用相應的數據庫驅動來處理。
在應用目錄/common/conf/config.php中設置
// mysql全局配置定義 'DB_TYPE'=>'mysql', //數據庫類型 'DB_HOST'=>'localhost', //服務器地址 'DB_NAME'=>'test', //數據庫名 'DB_USER'=>'root', //用戶名 'DB_PWD'=>'', //密碼 'DB_PORT'=>3306, //端口 'DB_PREFIX'=>'', //數據庫表前綴 // PDO專用配置 // ps:3.2.3數據庫類和驅動采用PDO重寫了,因此無論是什么數據庫都是基於PDO實現的,所以DB_TYPE不再支持PDO設置 // 3.21 DB_TYPE填寫pdo // 3.23填寫准確的類型mysql 'DB_TYPE'=>'mysql', //數據庫類型 'DB_USER'=>'root', //用戶名 'DB_PWD'=>'', //密碼 'DB_PREFIX'=>'', //數據庫表前綴 'DB_DSN'=>'mysql:host=localhost;dbname=test;charset=UTF8',
應用目錄/Home/Controller/ModelController.class.php
<?php namespace Home\Controller; use Think\Controller; // 要引用Model模塊 use Think\Model; class ModelController extends Controller { public function test($user,$pass){ echo "user:".$user."<br/>pass:".$pass; } public function model1(){ // 實例化一個Model對象 $user=new Model('user1'); var_dump($user->select()); } }
2.實例化模型
1.使用Model基類
<?php namespace Home\Controller; use Think\Controller; // 要引用Model模塊 use Think\Model; class ModelController extends Controller { public function model1(){ // Model 基類可以傳遞三個參數: // Model(['模型名'],['數據表前綴'],['數據庫連接信息']); // 實例化一個Model對象,傳一個數據表名 // ********方法一*********** $user=new Model('elector','','mysql://root:@localhost/test'); //顯示變量結構 var_dump($user); // ********方法二*********** $user=new Model('user1'); // 打印出所有數據 var_dump($user->select()); } }
2.使用M()方法
$Demo = new Model();那么它等價於 $Demo = M();
// 使用M方法不需要引入命名空間 (use Think\Model;) $user=M('elector'); var_dump($user->select());
3.模型定義
- Model類的名字要與Controller類的名字一致
- 在model類中這個類的名字代表要查詢的表名字
- 在controller類中要引用model類
- 全部設置好了,就可以在瀏覽器訪問了
在Home目錄/Model下創建一個model類.(User1Model.class.php)
<?php namespace Home\Model; use Think\Model; // 注意:這個User1Model的意思是要查詢的是表名為user1 class User1Model extends Model { }
在Home目錄/Controller下創建一個Controller類(User1Controller.class.php)
<?php namespace Home\Controller; use Think\Controller; // 注意:要引用model類 use Home\Model\User1Model; class User1Controller extends Controller { public function model1(){ $user=new User1Model(); var_dump($user->select()); } }
在common/conf/config.php
//頁面Trace,調試輔助工具 'SHOWPAGETRACE' =>true,
對表名、前綴、附加數據庫修改。代碼如下:
model/User1Model.class.php
<?php namespace Home\Model; use Think\Model; // 注意:這個User1Model的意思是要查詢的是表名為user1 class User1Model extends Model { // 1.我們查詢語句為:SELECT * FROM `test.user1` // 重新定義表前綴 protected $tablePrefix = 'abc_'; // 重新定義表名 protected $tableName = 'abc'; // 重新定義完整的帶前綴的表名 protected $trueTableName = 'user1'; // 修改附加數據庫名 protected $dbName = 'tp'; }
4.使用D()方法
ThinkPHP 提供了 D()方法來直接是實例化模型類,並且還可以免去引入命名空間等操作
model/User1Model.class.php
<?php namespace Home\Controller; use Think\Controller; // 注意:要引用model類 use Home\Model\User1Model; class User1Controller extends Controller { public function model1(){ //實例化UserModel類 $user=D('user1'); var_dump($user->select()); } }
PS:使用 D()方法比直接使用模型類更加的智能.
如果在\Home\Model\UserModel 找不到該模型類,那么就會去公共模塊下找\Common\Model\UserModel 去找。
如果還找不到,就會直接實例化基類 Model()類,也就是等同於使用 M()方法
區別:
- D就是實例化一個基於Model文件的Model
- M則是通過直接實例化Model方法(ThinkPHP基類)來動態的實例化一個Model對象,即使這個對應的Model文件不存在
5.使用原生的 SQL 語句進行操作數據庫
$user1=M(); var_dump($user1->query('select * from user1 where id=1'));