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

新手上路,请多包涵

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

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

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

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

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

 $q->getSQLQuery();

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

原文由 Amandasaurus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
2 个回答

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

  • 发送声明,以便准备好(这是 $query->getSql() 返回的内容)
  • 然后,发送参数(由 $query->getParameters() 返回)
  • 并执行准备好的语句

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

原文由 Pascal MARTIN 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过将 sql 准备语句与以下绑定组合来构建 sql 字符串:

 $sql = str_replace_array('?', $query->getBindings(), $query->toSql())

 str_replace_array(string $search, array $replacement, string $subject): string

PHP 的 str_replace_array 函数将 \(subject 中的每个 \)search 实例依次替换为 $replacement 数组中的值。

原文由 Taosif7 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏