一尘不染

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

mysql

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

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

然后在函数中添加各种where子句和适当的东西,像这样

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

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

$q->getSQLQuery();

但是,这只会打印出准备好的语句,而不是完整的查询。我想查看它发送给MySQL的内容,但是它正在打印出一条准备好的语句,包括?。有什么办法可以查看“完整”查询吗?


阅读 241

收藏
2020-05-17

共1个答案

一尘不染

教义没有向数据库服务器发送“真正的SQL查询”:它实际上是在使用准备好的语句,这意味着:

  • 发送该语句,以供准备(这是所返回的$query->getSql()
  • 然后,发送参数(由返回$query->getParameters()
  • 并执行准备好的语句

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

2020-05-17