zoukankan      html  css  js  c++  java
  • ThinkPHP 数据库操作(六) : 查询事件、事务操作、监听SQL

    查询事件

    查询事件(V5.0.4+)

    从 5.0.4+ 版本开始,增加了数据库的CURD操作事件支持,包括:

    查询事件仅支持 find 、 select 、 insert 、 update 和 delete 方法。

    注册事件

    使用下面的方法注册数据库查询事件

    Query::event('after_insert','callback');
    Query::event('before_select',function($options,$query){
        // 事件处理
        return $result;
    });

    事务操作

    使用事务处理的话,需要数据库引擎支持事务处理。比如 MySQL 的 MyISAM 不支持事务处理,需要使用 InnoDB 引擎。

    使用 transaction 方法操作数据库事务,当发生异常会自动回滚,例如:

    自动控制事务处理

    Db::transaction(function(){
        Db::table('think_user')->find(1);
        Db::table('think_user')->delete(1);
    });

    手动控制事务

    // 启动事务
    Db::startTrans();
    try{
        Db::table('think_user')->find(1);
        Db::table('think_user')->delete(1);
        // 提交事务
        Db::commit();
    } catch (Exception $e) {
        // 回滚事务
        Db::rollback();
    }

      注意在事务操作的时候,确保你的数据库连接是相同的。

    监听SQL

    如果开启数据库的调试模式的话,你可以对数据库执行的任何SQL操作进行监听,使用如下方法:

    Db::listen(function($sql, $time, $explain){
        // 记录SQL
        echo $sql. ' ['.$time.'s]';
        // 查看性能分析结果
        dump($explain);
    });

      默认如果没有注册任何监听操作的话,这些SQL执行会被根据不同的日志类型记录到日志中。

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/swjian/p/10622230.html
Copyright © 2011-2022 走看看