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

我有以下代码从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);

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...