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 HomeController; use ThinkController; // 要引用Model模块 use ThinkModel; 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 HomeController; use ThinkController; // 要引用Model模块 use ThinkModel; 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 ThinkModel;) $user=M('elector'); var_dump($user->select());
3.模型定义
- Model类的名字要与Controller类的名字一致
- 在model类中这个类的名字代表要查询的表名字
- 在controller类中要引用model类
- 全部设置好了,就可以在浏览器访问了
在Home目录/Model下创建一个model类.(User1Model.class.php)
<?php namespace HomeModel; use ThinkModel; // 注意:这个User1Model的意思是要查询的是表名为user1 class User1Model extends Model { }
在Home目录/Controller下创建一个Controller类(User1Controller.class.php)
<?php namespace HomeController; use ThinkController; // 注意:要引用model类 use HomeModelUser1Model; 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 HomeModel; use ThinkModel; // 注意:这个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 HomeController; use ThinkController; // 注意:要引用model类 use HomeModelUser1Model; class User1Controller extends Controller { public function model1(){ //实例化UserModel类 $user=D('user1'); var_dump($user->select()); } }
PS:使用 D()方法比直接使用模型类更加的智能.
如果在HomeModelUserModel 找不到该模型类,那么就会去公共模块下找CommonModelUserModel 去找。
如果还找不到,就会直接实例化基类 Model()类,也就是等同于使用 M()方法
区别:
- D就是实例化一个基于Model文件的Model
- M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在
5.使用原生的 SQL 语句进行操作数据库
$user1=M(); var_dump($user1->query('select * from user1 where id=1'));