【问题标题】:How do you view a DQL query prepared query at runtime?您如何在运行时查看 DQL 查询准备好的查询?
【发布时间】:2011-11-11 20:36:17
【问题描述】:
function get_event($id){
            $query = $this->em->createQuery('SELECT e.name,e.date, e.time, e.venue, e.venueaddress,e.parish,e.genre, e.entryprice, e.phone, e.specialguests,
                                            e.weblink, e.otherinfo, e.flyer1, e.flyer2 from Events e WHERE e.id = :id');
            $query->setParameter('id', $id);


//CAN I VIEW THE QUERY AT THIS TIME?


            $result = $query->getResult();    
            return $result;    
        }

【问题讨论】:

  • 我试过了,但它在学说 2 中不起作用?
  • Doctrine 2 中调试查询的最简单解决方案:$em->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());

标签: php doctrine doctrine-orm dql


【解决方案1】:

Haim Evgi 建议的 EchoSqlLogger 是日志输出的回显,所以你应该在你的网站上看到它。

如果您只想查看 Doctrine 会生成什么 SQL 查询,请使用:

$query = $this->em->createQuery('SELECT e.name,e.date, e.time, e.venue, e.venueaddress,e.parish,e.genre, e.entryprice, e.phone, e.specialguests,
                                        e.weblink, e.otherinfo, e.flyer1, e.flyer2 from Events e WHERE e.id = :id');

print $query->getSQL();

但请注意,该 sql 字符串中不包含参数,它们显示为占位符 (= ?)。

为了观察 Doctrine 所做的事情,我最常用的技术是启用 mysql(或您使用的任何数据库)query log(不要在负载很重的生产服务器上执行此操作!)。

如果查询日志在/var/log/mysql/query.log下,我就这样做:

# tail -f /var/log/mysql/query.log

(详情请参阅tail command

并重新加载执行查询的页面。

【讨论】:

    【解决方案2】:

    在教义 2.3.2

    use Doctrine\DBAL\Logging\DebugStack;
    $logger = new DebugStack();
    $config->setSQLLogger($logger);
    

    现在您可以使用 print_r($logger); 打印 $logger;

    【讨论】:

      【解决方案3】:
      //create query
      $oQuery = $this->em->createQuery('SELECT tbl.id FROM mytable tbl WHERE tbl.id = :id');
      
      //print query and params
      echo "SQL: ".$oQuery->getSQL();
      while($param = $oQuery->getParameters()->current()){
        echo "Param: ".$param->getName()." | ".$param->getValue()." | ".$param->getType();
        $oQuery->getParameters()->next();
      }
      

      SQL: SELECT tbl.id AS id0 FROM mytable tbl WHERE tbl.id = ?

      参数:id | 1 |整数

      【讨论】:

        猜你喜欢
        • 2013-12-25
        • 2017-03-02
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 2012-01-02
        • 2012-05-16
        相关资源
        最近更新 更多