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

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

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

区别:

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

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

        $user1=M();
var_dump($user1->query('select * from user1 where id=1'));

【三十二】thinkphp之连接数据库、实例化模型的更多相关文章

  1. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...

  3. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  4. COJ968 WZJ的数据结构(负三十二)

    WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...

  5. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  6. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  7. Gradle 1.12用户指南翻译——第三十二章. JDepend 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)

    开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...

  9. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  10. ASP 三十二条精华代码 (1)

    ASP 三十二条精华代码 (1) 2009-08-10 09:53:03  www.hackbase.com  来源:互联网 1. oncontextmenu="window.event.r ...

随机推荐

  1. Django框架----命名URL和URL反向解析

    在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等).人们强烈希望不要硬编码这些URL(费 ...

  2. python之常量和变量

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...

  3. The Little Prince-12/04

    The Little Prince-12/04 The wheat fields have nothing to say to me. And that is sad. But you have ha ...

  4. Python进阶【第三篇】Python中的基本数据类型

    一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 二.基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1 ...

  5. Kattis之旅——Prime Reduction

    A prime number p≥2 is an integer which is evenly divisible by only two integers: 1 and p. A composit ...

  6. 【js】关于闭包和匿名函数

    关于js闭包.之前我一直以为是匿名函数,以为封闭式的创建即执行销毁就是闭包,其实这是匿名函数,不一样的.也没有闭包的使用经验. 后来去网上查了下才知道,闭包的意思是:函数内部还有函数,返回一个函数,内 ...

  7. django的url配置

    在一个请求到达的时候,最先达到的就是视图层,然后根据url映射到视图函数.这一部分我们来说明url的配置. 概述 为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(U ...

  8. yii2 mysql根据多个字段的数据计算排序

    mysql根据多个字段的数据计算排序 select *,num1+num2*10+num3*100 num from $tableName order by num desc yii2框架活动记录ac ...

  9. API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd(转)

    前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作 ...

  10. windows下常用linux对应工具

    tail 可从http://files.cnblogs.com/hantianwei/tail.zip下载,解压后exe,如下: e:\>tail -fn 300 tool-slow.logus ...