【三十二】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 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'));
【三十二】thinkphp之连接数据库、实例化模型的更多相关文章
- NeHe OpenGL教程 第三十二课:拾取游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- COJ968 WZJ的数据结构(负三十二)
WZJ的数据结构(负三十二) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,边上均有权值,每个点上有 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- SQL注入之Sqli-labs系列第三十二关(基于宽字符逃逸注入)
开始挑战第三十二关(Bypass addslashes) 0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 function che ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- ASP 三十二条精华代码 (1)
ASP 三十二条精华代码 (1) 2009-08-10 09:53:03 www.hackbase.com 来源:互联网 1. oncontextmenu="window.event.r ...
随机推荐
- Lonsdor K518ISE free update news on what makes and year can work
Lonsdor K518ISE engineers recently tested a number of cars and verified working great, below are tes ...
- js 实现复制粘贴时注意方法中需要两次点击实现的bug
方法一:利用ZeroClipboard 详见 :http://www.jb51.net/article/22403.htm 1先引入 <script type="text/javasc ...
- multer中间件
1.Multer是node.js的一个中间件,用于处理multipart/form-data类型的表单数据,它主要用于上传文件.(Multer不会处理任何非multipart/form-data类型的 ...
- fjwc2019 D2T3 排序(堆)
#183. 「2019冬令营提高组」排序 贴一段ppt 考虑模拟出这个算法进行k轮(即外层的i循环到k)时的序列,之后再暴力模拟零散的步. 考虑这个算法在01序列上的表现,k轮后实际上就是将最开始的不 ...
- Vijos 1404 遭遇战 - 动态规划 - 线段树 - 最短路 - 堆
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC ...
- Codeforces 841D Leha and another game about graph - 差分
Leha plays a computer game, where is on each level is given a connected graph with n vertices and m ...
- libcurl 静态库编译
转载:http://www.cnblogs.com/jkcx/p/6406706.html 1.下载最新版的libcurl(官网:http://curl.haxx.se/download.html), ...
- 【转】java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- topcoder srm 520 div1
problem1 link 设$f[i][j][k]$表示考虑了前$i$道题,剩下时间为$j$,剩下技能为$k$的最大得分. 从小到大计算二元组$(j,k)$的话,在存储上可以省略掉$i$这一维. p ...
- topcoder srm 690 div1 -3
1.给定一个数字$N$,从1到100的100个数字中选出$K$个数字(设为集合$S$),然后对$S$进行如下运算: (1)删除$S$中的某些数字:(可以删除0个数字) (2)将$S$中的某些数字取为它 ...