当前位置:首页 » 编程语言 » thinkphp修改sql语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

thinkphp修改sql语句

发布时间: 2022-05-11 08:16:52

Ⅰ 原生sql转thinkphp5写法

TP的模型可以支持原生SQL操作,提供了query和execute两个方法,为什么原生SQL还要区分两个方法呢,原因有两个:
1、返回类型不同
query用于查询,返回的是数据集,和select或者findall一样,所以可以直接在模板里面使用volist标签输出query的查询结果
execute用于写操作,返回的是状态或者影响的记录数
2、读写统计需要
为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是query和execute)

使用原生SQL很简单,我们甚至不需要实例化任何的模型,例如:
$Model = new Model(); // 实例化一个空模型
下面的方法是等效的
$Model = D(); 或者 $Model = M();
// 下面执行原生SQL操作
$Model->query('select * from think_user where status=1');
$Model->execute('update think_user set status=1 where id=1');
如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:
$User = D('User');
$User->query('select * from think_user where status=1');
$User->execute('update think_user set status=1 where id=1');
在这种情况下面,我们可以简化SQL语句的写法,例如:
$User->query('select * from __TABLE__ where status=1');
$User->execute('update __TABLE__ set status=1 where id=1');
系统会自动把__TABLE__替换成当前模型对应的数据表名称,实际的数据表由模型决定。

通常来说,我们都是使用原生SQL操作实现一些ORM和CURD比较难实现的操作,另外,如果SQL不复杂的话 原生SQL的效率和连贯操作的效率差别是微乎其微的,TP本身的ORM实现也是相当高效的。

Ⅱ 用thinkPHP框架怎么实现该sql语句

亲,这个不需要转换,直接使用就行了,TP里面提供了一个query方法的,直接吧sql传递进去

Ⅲ THINKPHP 用sql原生语句update 不管用

$row=mysql_query("update survey set option1=".$pro['option1'].""); 修改为 $row=mysql_query("update survey set option1='".$pro['option1']."'"); option1这个变量如果是int类型的话,你第一句是可以的,如果是字符,这个是更新不进去的,需要在变量外面加入单引号('变量值'); 还有一点,这个更新操作,最好别判断$row,因为如果用户在修改的时候,想来想去,最终所有字段都未修改,你这个程序进去了,最终还是会判断的,但是你sql语句没有修改,还是原来的值sql默认是不会做操作的,也就是说没修改的情况下,$rows还是返回false,这样你这个就会提示文章修改失败!! 希望能对你有所帮助

Ⅳ ThinkPHP里怎么直接执行一句SQL语句 - PHP框架开发

$waw
=
M();
$res
=
$waw->query($sql); 或
$res
=
$waw->execute($sql);
由于$sql中包含了表名,实例化模型时可以为空。
注:query()与execute()是有区别的,不能乱用,详见ThinkPHP光放手册驱动扩展部分。

褔递达

Ⅳ thinkphp 怎么写sql语句

$haha = M();
$res = $haha->query($sql);
或 $res = $waw->execute($sql);
$sql中包含了表名,实例化模型时可以为空。
注意query是查功能,execute是增删改功能

Ⅵ thinkphp3.2.3 执行原生sql语句(SET SQL_QUOTE_SHOW_CREATE = 1)时报错,是怎么回事

query 执行SQL查询操作
$Model = M()
$Model->query("select * from think_user where status=1");
如果数据非法或者查询错误则返回false
否则返回查询结果数据集(同select方法)

你用插入语句 返回的不是数组 所以就报错了吧

execute用于更新和写入数据的sql操作
$Model = M()
$Model->execute("update think_user set name='thinkPHP' where status=1");
如果数据非法或者查询错误则返回false
否则返回影响的记录数

Ⅶ THINKPHP sql语句的问题

问题的所在, 原来这个跟入口文件 引入./ThinkPHP/ThinkPHP.php的位置有关系, 首先大家都应该知道加载重要核心文件都要用到
require("./ThinkPHP/ThinkPHP.php");这条代码的位置很有讲究,(我的环境是thinkphp3.1.3)
大家可以尝试下, 如果我的代码是

//3.加载核心类
require("./ThinkPHP/ThinkPHP.php");
//1.创建目录名称
define("APP_NAME","Home");
//2.创建目录路径
define("APP_PATH","./Home/");
//开启调试模式
define('APP_DEBUG',true);

复制代码

这样放置的话结果是 在与ThinkPHP源码目录在同一个级别下生成的目录文件,
情况二:

//1.创建目录名称
define("APP_NAME","Home");
//2.创建目录路径
define("APP_PATH","./Home/");
//3.加载核心类
require("./ThinkPHP/ThinkPHP.php");
//开启调试模式
define('APP_DEBUG',true);

复制代码

情况二的方法,会生成一个站点Home目录结构都是好的,但问题是在调试模式下无法显示sql生成语句。这是因为 当引入核心类库文件 后就已经执行默认的设置了,所以 define('APP_DEBUG',true); 加载有问题。
想要解决以上两个问题就必须要require('./ThinkPHP/ThinkPHP.php');这条代码写在最后一行。那么你们所说的sql无法显示就神奇的出现了。

Ⅷ thinkphp怎么获取添加的sql语句信息

  1. thinkphp中的add方法获取sql错误消息可以调用getDbError()函数。
    getDbError函数可以获取数据库的错误信息。
    function GetRandomAd()
    {
    global $myDB;
    $today = date('j');
    $ql = "SELECT * FROM reklama WHERE today<>'$today' OR realimpr<impr OR impr=0 ORDER BY RAND() LIMIT 1";
    $result = $myDB->Execute($ql) or die(GetDbError($myDB->ErrorMsg()));
    $r_id = $result->Fields("aid");
    $r_ad_text = $result->Fields("ad_text");
    $r_today = $result->Fields("today");
    $result->Close();
    if ($r_id)
    {
    if ($today != $r_today) $ql = "UPDATE reklama SET realimpr=1, today='$today' WHERE aid='$r_id'";
    else $ql = "UPDATE reklama SET realimpr=realimpr+1 WHERE aid='$r_id'";
    $result = $myDB->Execute($ql) or die(GetDbError($myDB->ErrorMsg()));
    $result->Close();
    }
    return $r_ad_text;

    }

  2. public function read(){
    // 实例化一个空模型,没有对应任何数据表
    $Dao = M();
    //或者使用 $Dao = new Model();

    $list = $Dao->query("select * from user where uid<5");
    if($list){
    $this->assign('list', $list );
    $this->display();
    } else {
    $this->error($Dao->getError());
    }
    }

    public function read(){
    header("Content-Type:text/html; charset=utf-8");
    // 实例化一个空模型,没有对应任何数据表
    $Dao = M();
    //或者使用 $Dao = new Model();

    $num = $Dao->execute("update user set email = '[email protected]' where uid=3");
    if($num){
    echo '更新 ',$num,' 条记录。';
    }else{
    echo '无记录更新';
    }
    }

    public function read(){
    $Dao = M("User");
    $list = $Dao->query("select __TABLE__ from user where uid<5");

    }


    原生SQL查询

    尽管ThinkPHP内置了大量的数据操作方法,但ThinkPHP仍保留了对原生SQL查询的支持,以便满足复杂查询的需要和一些特殊的数据操作。

    SQL查询的返回值是直接返回DB类的查询结果,没有做任何的处理,而且可以支持查询缓存

    原生SQL查询有 query() 和 execute() 两个方法:

    query():用于 SQL 查询操作,并返回符合查询条件的数据集

    execute():更新和写入数据的 SQL 操作,返回影响的记录数

    query()

    query() 方法是用于 SQL 查询操作,和select()方法一样返回符合查询条件的数据集。

    例子:

    对于 query() 方法返回的数据集,跟 select() 一样,可以在模板里直接循环输出。

    execute()

    execute() 方法用于更新和写入数据的 SQL 操作(注:非查询操作,无返回数据集),返回影响的记录数。

    例子:

    如果查询比较复杂或一些特殊的数据操作不能通过 ThinkPHP 内置的 ORM 和 ActiveRecord 模式实现时,就可以通过直接使用原生 SQL 查询来实现。

    注意:以上都是 user 没有表前缀的例子,在查询语句中,查询的表应该写实际的表名字(包括前缀)。

    小技巧

    原生 SQL 查询需要在查询语句中写上对应的表名,如果表名有改动的时候,就需要逐行去更改 SQL 语句中的表名字,这样不免麻烦。ThinkPHP 提供了一个小技巧来帮助解决这个问题。

    在 SQL 语句中,以 __TABLE__ 来替代真实的表名,而在实例化模型时,仍以表名为参数,如:

    系统在解析的时候会自动替换成当前模型对应的表名,这样就可以做到即使表名有所变化,只需修改实例化对应的表名即可而不用修改原生的 SQL 语句。

Ⅸ thinkphp中怎么把app_wujin_thumbnail里的linkurl联合查询到app_wujin_article里去,要怎么写sql语句

首先你需要建立一个包含TPM的ThinkPHP项目。 你可以在ThinkPHP官方网站上下载TPM, 也可以中github中获得。将下载的文件中, Tpl目录下的文件复制到你的项目文件夹下Tpl目录中。将SwitchMobileTplBehavior.class.php 复制到 项目目录下 Lib/Behavior 目录下,将TemplateMobile.class.php 文件复制到 ThinkPHP/Extend/Driver/Template 下。项目需要开启layout , 在项目配置文件中配置:

1

'LAYOUT_ON'=>true

在项目的Conf文件夹下建立tags.php ,代码为:

<?php return array( 'action_begin'=>array('SwitchMobileTpl') )

如果想手机客户端支持页面跳转,需要修改核心文件 ThinkPHP/Common/functions.php 中得redirect函数,修改为:

function redirect($url, $time=0, $msg='') { //多行URL地址支持 $url = str_replace(array("\n", "\r"), '', $url); if (empty($msg)) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if (!headers_sent()) { // redirect if (0 === $time) { //手机客户端跳转发送redirect的header if(defined('IS_CLIENT') && IS_CLIENT){ if(''!==__APP__){ $url=substr($url,strlen(__APP__)); } header('redirect:'.$url); }else{ header('Location: ' . $url); } } else { header("refresh:{$time};url={$url}"); echo($msg); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if ($time != 0) $str .= $msg; exit($str); }}

Ⅹ 这个sql语句怎么改成thinkphp的查询

写一个model类就行

//文件名字:xxxxViewModel.php----这个是3.1版本
<?php
{
public$viewFields=array(
'表1'=>array('你要搜索的字段在前台显示,多个用逗号隔开','_type'=>'LEFT'),
'表2'=>array('你要搜索的字段在前台显示','_on'=>'表1的某一个字段=表2的某一个字段值')


);
}
//文件名字:xxxxViewModel.php----这个是3.2版本
<?php
namespaceAdminModel;
useThinkModelViewModel;
{
public$viewFields=array(
'表1'=>array('你要搜索的字段在前台显示,多个用逗号隔开','_type'=>'LEFT'),
'表2'=>array('你要搜索的字段在前台显示','_on'=>'表1的某一个字段=表2的某一个字段值')

);
}
?>

然后D函数select 就行