加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Yii – 如何打印由findAll使用的SQL

发布时间:2020-12-13 16:28:25 所属栏目:PHP教程 来源:网络整理
导读:我有以下代码从db获取一些记录 $criteria = new CDbCriteria(); $criteria-condition = 't.date BETWEEN "'.$from_date.'" AND "'.$to_date.'"'; $criteria-with = array('order'); $orders = ProductOrder::model()-findAll($criteria); 是否可以获取findAl
我有以下代码从db获取一些记录
$criteria = new CDbCriteria();
    $criteria->condition = 't.date BETWEEN "'.$from_date.'" AND "'.$to_date.'"';
    $criteria->with = array('order');

    $orders = ProductOrder::model()->findAll($criteria);

是否可以获取findAll使用的SQL?我知道你可以从调试控制台得到它.但是我使用yiic.php在后台运行脚本

您可以将执行的查询记录在应用程序日志中并进行审查.在配置文件中这样的东西:
'components' => array(
  'db'=>array(
    'enableParamLogging' => true,),'log'=>array(
    'class'=>'CLogRouter','routes'=>array( 
      array(
        'class'=>'CFileLogRoute','levels'=>'trace,log','categories' => 'system.db.CDbCommand','logFile' => 'db.log',);

在某些情况下(例如运行测试时),您还需要调用Yii :: app() – > log-> processLogs(null);在这个工作的最后阶段.

当然,一旦你没有什么阻止你编写自己的日志路由,它与记录的消息不同,但是请记住在请求结束时处理日志(或者当你调用processLogs时),而不是每次你记录一些东西

顺便说一下,您不应该在查询中使用动态输入来构建这样的查询.改用绑定变量:

$criteria = new CDbCriteria();
$criteria->condition = 't.date BETWEEN :from_date AND :to_date';
$criteria->params = array(
  ':from_date' => $from_date,':to_date' => $to_date,);
$criteria->with = array('order');

$orders = ProductOrder::model()->findAll($criteria);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读