如何在运行时查看DQL查询准备的查询?

时间:2011-09-07 05:34:50

标签: php doctrine doctrine-orm dql

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

3 个答案:

答案 0 :(得分:3)

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

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

$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

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

答案 1 :(得分:3)

在学说2.3.2中

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

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

打印$ logger

答案 2 :(得分:0)

//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 =?

Param:id | 1 |整数