TP sql语句

ThinkPHP内置的ORM和ActiveRecord模式实现了方便的数据存取操作,而且新版增加的连贯操作功能更是让这个数据操作更加清晰,但是ThinkPHP仍然保留了原生的SQL查询和执行操作支持,为了满足复杂查询的需要和一些特殊的数据操作,SQL查询的返回值因为是直接返回的Db类的查询结果,没有做任何的处理。

主要包括下面两个方法:

1、query方法

query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法)。

使用示例:

  1. $Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
    $Model->query("select * from think_user where status=1");

如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的SQL语句是什么。

可以在query方法中使用表名的简化写法,便于动态更改表前缀,例如:

  1. $Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
    $Model->query("select * from __PREFIX__user where status=1");
    // 3.2.2版本以上还可以直接使用
    $Model->query("select * from __USER__ where status=1");

和上面的写法等效,会自动读取当前设置的表前缀。

2、execute方法

execute用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false ,否则返回影响的记录数。

使用示例:

  1. $Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
    $Model->execute("update think_user set name=‘thinkPHP‘ where status=1");

如果你当前采用了分布式数据库,并且设置了读写分离的话,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作,而不管你的SQL语句是什么。

也可以在execute方法中使用表名的简化写法,便于动态更改表前缀,例如:

  1. $Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
    $Model->execute("update __PREFIX__user set name=‘thinkPHP‘ where status=1");
    // 3.2.2版本以上还可以直接使用
    $Model->execute("update __USER__ set name=‘thinkPHP‘ where status=1");

和上面的写法等效,会自动读取当前设置的表前缀。

摘自:ThinkPHP3.2完全开发手册

时间: 2024-08-26 20:59:20

TP sql语句的相关文章

TP打印输出SQL语句

模型 -> getLastSql(); //TP打印SQL语句 $data = $this->field($field)->where($condition)->select(); echo $this->getLastSql();//输出 SELECT `id`,`title`,materialUrl as outerUrl,image as img,`type`,`sort`,`status`,`source` FROM `ims_push` WHERE `type` =

thinkphp 和 laravel使用sql语句操作db和源码浅析

前言 对于一个PHP应用,可能最多的就是操作数据,以致于初学者有时只把php当做数据库增删查改的工具(这也无可厚非).而基于框架的语言,在框架中自然不能少了对数据库操作的封装,总想打开源码,看看到底是怎么工作的,趁着有时间~~ thinkphp[tp框架] 首先是这个中国人用的最多的框架说起.ps:我是基于thinkphp3.2来说,tp5.x党见谅~ thinkphp支持对原生的sql语句执行,如: $db=M(); $condition="XXX"; $sql="sele

oracle sql语句运行效率

--当前执行sql语句 SELECT a.SID , a.SERIAL# , a.USERNAME , b.PARSE_CALLS , b.PARSING_SCHEMA_NAME , b.CPU_TIME / 1000000 , b.ELAPSED_TIME / 1000000 , b.DISK_READS , b.DIRECT_WRITES , b.BUFFER_GETS , a.event , b.sql_text , b.SQL_FULLTEXTFROM v$session a INNER

sql 语句之 case

case语句语法: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 首先创建一张users表,其中包含id,name,sex三个字段,表内容如下: 复制代码 SQL> drop table users purge; drop table users p

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

JDBC系列:(3)使用PreparedStatement执行sql语句

执行sql语句的接口 接口 作用 Statement接口 用于执行静态的sql语句 PreparedStatement接口 用于执行预编译sql语句 CallableStatement接口 用于执行存储过程的sql语句(call xxx) PreparedStatement Vs Statement 序号 不同 描述 1 语法不同 PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2 效率不同 PreparedStatement可以使用sql缓存区

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

应用系统如何分析和获取SQL语句的执行代码

大部分开发人员都有这样一个需求,在程序连接数据库执行时,有时需要获取具体的执行语句,以便进行相关分析,这次我向大家介绍一下通用权限管理系统提供的SQL语句执行跟踪记录,直接先看看代码吧:(这个功能我也是在看底层代码时发现的) namespace DotNet.Utilities { /// <summary> /// SQLTrace /// 记录SQL执行 Global 中设置 BaseSystemInfo.LogSQL=true 可以开启跟踪记录 /// /// /// 修改纪录 ///

SQL 语句日期用法及函数

SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数:select day(cl_s_time) as '日' from class  --返回天select '月'=month(cl_s_time) from class  --返回月select '年'=year(cl_s_time) from class  --返回年 --DATEADD(datepart,number,date)——在日期上增加给定日期类型的数量:select date