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. GUI带有右键菜单,带有时间显示的

    %带有右键菜单的GUI figure('Menubar','none'); h = uicontextmenu; uimenu(h,'Label','A'); uimenu(h,'Label','B' ...

  2. 有登陆认证的情况下如何使用Wisdom RESTClient?

    访问REST API时,很多系统需要登陆认证,登陆成功以后才允许访问API.下面介绍一下有登陆认证情况下如何使用 Wisdom RESTClient测试API的方法. 方法很简单即在浏览器上成功登录系 ...

  3. 使用Oracle数据库时的org.springframework.jdbc.BadSqlGrammarException:

    org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLExc ...

  4. MySQL日志详细说明

    这片博文我们会详细说明MySQL本身的日志,不包含重做日志和undo日志(这两个日志是innodb存储引擎的日志). MySQL本身的日志有以下几种(MySQL5.7版本): 错误日志 慢查询日志 通 ...

  5. jQuery输入框回车添加标签特效

    效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  6. 关于使用spring mvc或者resteasy构建restful服务的差别与比较

    resteasy 是 jboss的一个开源java api for restful service(JSR 311,sun 2008年发布,最新GA版本是2.0, JAX-RS 2.0 (JSR-33 ...

  7. git review filter的一些规则

    https://review.openstack.org/#/c/258797/ https://review.openstack.org/#/q/is:closed+(owner:yuntong)+ ...

  8. openstack cloud init set password

    设置代理和password #!/bin/bash cd /home/ubuntu wget otcloud-gateway.bj.intel.com/script.tar.gz ]; then cu ...

  9. python简说(十一)os模块

    import osres = os.listdir('/Users/nhy/Desktop') #列出某个目录下的所有文件# os.remove()# os.rename()# os.mkdir(r' ...

  10. opencv学习之路(6)、鼠标截图,滑动条播放视频

    一.鼠标截图 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...