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

前端之家收集整理的这篇文章主要介绍了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);

猜你在找的PHP相关文章