Doctrine - 如何打印出真正的sql,而不仅仅是准备好的语句?

2022-08-30 06:25:45

我们使用的是 Doctrine,一个 PHP ORM。我正在创建一个这样的查询:

$q = Doctrine_Query::create()->select('id')->from('MyTable');

然后在函数中,我适当地添加了各种地方的子句和东西,就像这样

$q->where('normalisedname = ? OR name = ?', array($string, $originalString));

稍后,在 -ing 该查询对象之前,我想打印出原始 SQL 以对其进行检查,然后执行以下操作:execute()

$q->getSQLQuery();

但是,这只会打印出预准备语句,而不是完整的查询。我想看看它向MySQL发送了什么,但它正在打印出一个准备好的语句,包括's。有没有办法查看“完整”查询??


答案 1

Doctrine不是向数据库服务器发送“真正的SQL查询”:它实际上是使用预准备语句,这意味着:

  • 发送语句,以便对其进行准备(这是返回的$query->getSql())
  • 然后,发送参数(由$query->getParameters())
  • 并执行预准备语句

这意味着PHP端永远不会有“真正的”SQL查询 - 所以,Doctrine无法显示它。


答案 2

一个工作示例:

$qb = $this->createQueryBuilder('a');
$query=$qb->getQuery();
// SHOW SQL: 
echo $query->getSQL(); 
// Show Parameters: 
echo $query->getParameters();

推荐