PHP之ThinkPHP框架(数据库)
PHP是网站后台开发语言,其重要的操作对象莫过于数据库,之前有了解过mysqli和pdo,但ThinkPHP的数据库交互必须使用其特定的封装方法,或者可以认为其是对PHP数据库操作的进一步封装,以达到更加安全和高效。
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。采用PDO方式,目前包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。
数据库连接配置
在APP目录下的database.php中进行相关参数的配置

测试准备工作
建立数据表tb_test,并在database.php中配置('prefix' => 'tb_',)使表前缀为tb_,然后建立模板Test.php,控制器Testx.php

控制器Testx.php实现
<?php
//其中user为模块名,需对应更改
namespace app\user\controller; //导入建立的模板,其中user为模块名,Test为模板类
use app\user\model\Test; class Testx
{
public function show()
{
$test=new Test();//得到模板的操作对象
$res=$test->testshow();//调用模板中的方法
dump($res);//输出 }
18 }
SQL语句数据库操作
使用execute()和query()方法实现数据库操作,是直接使用SQL原生语句进行数据表操作
execute可实现数据表的增、删、改,操作后会返回影响行数
query可实现数据表的增、删、改、查,只有查询会返回结果
模板Test.php实现:
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //---------execute的使用----------
//插入方法1
//返回操作行数1
//$res=Test::execute("insert into tb_test values(1,'dong1','dong11','dong111')"); //插入方法2
//返回操作行数1
//$res=Test::execute("insert into tb_test values(?,?,?,?)",[9,"W2","X1","N1"]); //-----------query的使用----------
//查询
//返回查询结果数组
//$res=Test::query("select * from tb_test"); //插入
//无结果返回
$res=Test::query("insert into tb_test values(?,?,?,?)",[19,"W12","X12","N12"]); return $res; }
}
基于PDO的添加语句
模板Test.php实现:
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //返回影响行数1
//$daa = ['text1' => '东小东', 'text2' => '100'];
//$res=Test::insert($daa); //得到最后一次操作的id
//$res= Test::getLastInsID(); //一次性插入多条数据
$indata=[
['text1' => '东小东1', 'text2' => '100'],
['text1' => '东小东2', 'text2' => '100'],
['text1' => '东小东3', 'text2' => '100'],
];
//返回影响行数3
$res=Test::insertAll($indata); return $res; }
}
基于PDO的删除语句
模板Test.php实现:
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //返回影响行数 //条件为id=3
//$res=Test::where('id',3)->delete(); //条件为id>30
$res=Test::where('id','>',30)->delete();
17
return $res; }
}
基于PDO的修改语句
模板Test.php实现:
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //返回影响行数,如果修改的值和原来相同,则返回0 //更新
//$res=Test::where('id', 9)->update(['text3' => '99999']); //自增2
//$res=Test::where('text1', "东小东1")->setInc('id', 2); //自减2
$res=Test::where('text1', "dongxiaodong")->setDec('id', 2); return $res; }
}
基于PDO的查询语句
模板Test.php实现:
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //查询数据库表的全部信息
//返回二维数组,结果不存在返回空数组
//$res=Test::select(); //指定条件查询
//$res=Test::where("text1","dong1")->select(); //查询符合条件的第一条数据,结果不存在返回null
//返回一维数组
//$res=Test::where("text1","W2")->find(); //查询某个字段的值,只能查询到第一个,失败返回空
//$res=Test::where("text1","dong1")->value('text2'); //查询某个字段的值,查询所有,失败返回空数组
//$res=Test::where("text1","W12")->column('text3'); //模糊查询 like,不区分大小写,返回数组
$res=Test::where("text1","like","%W%")->select(); //区间查询,返回数组
//$res=Test::where("id","between",[2,7])->select(); //统计行数
echo count($res); //打印单个数据
//echo $res[0]["text1"]; //find方法打印
//echo $res["text1"]; return $res; //每次处理2条数据,适用于对大数据处理
/*
Test::chunk(2, function($users) { foreach ($users as $user) {
dump($user);
echo "------------";
//功能
}
echo "********************"; });
*/
}
}
Where和whileOr条件的补充

<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Model;
class Test extends Model
{ public function testshow(){ //and 两个字段分别对应的两个条件必须同时成立
/*
$res=Test::where("id",6)
->where("text1","like","%W%")
->select();
*/ //多字段的and & 两个字段对应的同一个条件必须同时成立
/*
$res=Test::where("text1&text3","like","%W%")
->select();
*/ //or whereOr 两个条件其中一个成立即可
/*
$res=Test::where("id",8)
->whereOr("text1","like","%W%")
->select();
*/ //多字段的or 两个字段如果其中一个满足共同条件即可
$res=Test::where("text1|text3","like","%W%")
->select(); return $res; }
}
其他细节补充
//获取到表的字段,类型,主键等信息,返回数组
$res=Test::getTableInfo(); $res=Test::where("id",12)
->order("id") //排序,添加实参desc为降序,默认asc
->limit(0,10)//获取第[0,10]条数据
//->page("3,10") //分页,参数1为当前页,参数2为每页的条数
->field("id,text3") //提取的字段
->whereOr("text1","like","%W%") //以where共用表示其中一个条件满足即可
->select();
Db模块操作数据库
以上是使用模板继承Model来实现数据库操作的,当然还有另一种数据库的操作方法,那就是使用系统的Db模块。如果使用该模块则必须先use think\Db;
<?php
//其中user为模块名,需对应更改
namespace app\user\model;
use think\Db; class Test
{ public function testshow(){ //插入
//$daa = ['text1' => '东小东', 'text2' => '222222'];
//name则表示使用配置好的表前缀
//$res=Db::name('test')->insert($daa); //查询1
//table则需要加上表的前缀
//$res=Db::table("tb_test")->select(); //查询2
$res=Db::query("select * from tb_test"); return $res; }
}
参考:
PHP之ThinkPHP框架(数据库)的更多相关文章
- thinkphp框架 的 链接数据库和操作数据
框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...
- ThinkPhp框架对“数据库”的基本操作
框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是 ...
- 攻城记:Thinkphp框架的项目规划总结和踩坑经验
一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...
- 关于在BAE上部署ThinkPHP框架的问题
现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...
- ThinkPHP框架概述
框架概述 1.什么是框架 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统. 2.框架的应用场景 ① 代码重用 ② 合理分工 ③ 解决团队协作开发问题 3. ...
- Thinkphp框架----微信公众测试号开发
最开始的一个步骤.注册一个微信公众测试号.URL:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login; 接口配置的信息,对新手 ...
- Thinkphp框架 -- ajax无刷新上传图片
用Thinkphp框架做无刷新上传图片 视图层 View <!doctype html> <html lang="en"> <head> < ...
- 采用thinkphp框架实现添加管理员功能
最近由于忙于期中和期末考试没有写新的随笔了,另外内心也在纠结要不要考研,直到昨天终于痛下决心,才突然间觉得豁然开朗. 由于做老师留的课程设计作业采用thinkPHP框架频繁,最近的几篇随笔将都从thi ...
- 【PHP ThinkPHP框架】小bug汇总[更新]
目录结构 1.函数调用 2.绑定select下拉框数据 3.PHP查询功能 4.格式化时间和价钱 5.IF标签比较两个变量 6.eq标签比较两个变量 7.新增信息或者修改信息的自动验证和自动填充 8. ...
随机推荐
- python 09 文件操作
一 流程: #1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 二 例子 #1. 打开文件,得到文件句柄并赋值给一个变量f=open('a.txt','r ...
- javaMail的使用以及trying to connect to host "1xxx@163.com", port 25, isSSL false异常
最近项目用到邮件系统,开始了解javaMail...话不多说先上代码: pom依赖: <!-- 邮件 https://mvnrepository.com/artifact/javax.m ...
- c语言基础课第一次作业
1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 通过阅读邹欣老师的博客,了解到了老师心中理想的师生关系是(健身教练与健身学员).在初中,高中我们一直都是填鸭式教育,像 ...
- 大前端学习笔记【七】关于CSS再次整理
如果你在日常工作中使用 CSS,你的主要目标可能会重点围绕着使事情“看起来正确”.如何实现这一点经常是远不如最终结果那么重要.这意味着比起正确的语法和视觉结果来说,我们更少关心 CSS 的工作原理. ...
- 小白的CTF学习之路5——内存的逻辑结构
很衰的一天,各种意料之外的问题,但都挡不住我每日一更的步伐 内存的逻辑结构大致分为以下几种: 数组 栈与队列 链表 二叉树 以上,数组,栈,链表是我这章要说明的 在学习前需要了解的两个问题: 1.内存 ...
- LOJ-10095(缩点的特殊使用)
题目链接:传送门 思路: 缩点求最值,但是有一点行不通,如果被选中的点才能缩点,否则缩点没有意义: 所以就先缩选中的点,然后从小到大统计没有缩点的点,就是NO: 如果找最小值,就是一个环里的最小值,然 ...
- mybatis 中使用oracle merger into
项目背景:设计到excel导入,数据量也比较大,保证性能的情况下还要考虑到:如果数据中有这条数据的主键,则更新(update),不存在的情况,执行插入(insert). mybatis代码: < ...
- spring BeanWrapperImpl方便的嵌套属性(list)操作
beans 包主要提供了接口和类用于处理java beans. 其中最主要的接口是BeanWrapper: Spring 的中心接口,用于访问javabeans 的低层操作.默认实现为 ...
- 重装win10+ubuntu 双系统 UEFI启动模式
有较强的时效性!!先看一眼日期是否太古老! 任务 卸载双系统中的Ubuntu14,安装Ubuntu16 环境 操作系统: Win10 + Ubuntu14双系统 硬盘: 固态硬盘 + 机械硬盘,电脑的 ...
- Tensoflow API笔记(N) 设备指定
tf.device是tf.Graph.device()的一个包装,是一个用于指定新创建的操作(operation)的默认设备的环境管理器.参数为device_name_or_function, ...