zoukankan      html  css  js  c++  java
  • 【三十二】thinkphp之连接数据库、实例化模型

    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.模型定义

    1. Model类的名字要与Controller类的名字一致
    2. 在model类中这个类的名字代表要查询的表名字
    3. 在controller类中要引用model类
    4. 全部设置好了,就可以在浏览器访问了

    在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()方法

    区别:

    1. D就是实例化一个基于Model文件的Model
    2. M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在

    5.使用原生的 SQL 语句进行操作数据库

            $user1=M();
            var_dump($user1->query('select * from user1 where id=1'));
  • 相关阅读:
    Java 8实战之读书笔记五:超越Java 8
    Quartz的简单使用
    Quartz实现数据库动态配置定时任务
    Java解析Groovy和Shell的代码
    Spring学习笔记(3)——快速入门
    linux的防火墙端口配置
    气泡提示 纯CSS
    解决LINUX下SQLPLUS时上下左右键乱码问题
    redhat Enterprise Linux 6 VNC安装
    使用mount命令挂载CDROM
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/8316268.html
Copyright © 2011-2022 走看看