在运行时如何查看已准备好的查询的DQL? [英] How do you view a DQL query prepared query at runtime?
问题描述
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);
//可以在这个时间查看查询吗?
$ result = $ query-> getResult();
return $ result;
}
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(或任何使用的数据库)查询日志(不要在负载重的生产服务器上这样做)。
如果查询日志位于 /var/log/mysql/query.log
之下,我只需执行以下操作: / p>
#tail -f /var/log/mysql/query.log
pre>
(请参阅尾部命令更多细节)
并重新加载执行查询的页面。
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; }
解决方案The
EchoSqlLogger
as suggested by Haim Evgi, well, echo´s the log output, so you should see it on your website.If you just want to see what SQL query Doctrine would generate, use:
$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();
But be aware, parameters are not included in that sql string, they are shown as placeholders (= ?).
The most common technique I use in order to watch what Doctrine does is enabling the mysql (or whatever db you use) query log (dont do this on a production server which is under heavy load!).
If the query log is under
/var/log/mysql/query.log
I just do this:# tail -f /var/log/mysql/query.log
(see tail command for more details)
And reload the page which executes the query.
这篇关于在运行时如何查看已准备好的查询的DQL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!