微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);

原文地址:https://www.jb51.cc/php/132838.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐