如何打印出真正的SQL,而不仅仅是准备好的声明?

我们正在使用一种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的是什么,而是打印出一个准备好的声明,包括? 的。 有什么方法可以查看“完整”查询吗?


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

  • 发送语句,准备它(这是$query->getSql()返回的内容)
  • 然后,发送参数(由$query->getParameters()
  • 并执行准备好的语句
  • 这意味着在PHP方面从来没有“真正的”SQL查询 - 因此,Doctrine无法显示它。


    一个例子..

    $qb = $this->createQueryBuilder('a');
    $query=$qb->getQuery();
    

    显示SQL: $sql=$query->getSQL();

    显示参数: $parameters=$query->getParameters();


    如果您将所有查询记录在mysql中,您可以检查您的应用程序执行的查询:

    http://dev.mysql.com/doc/refman/5.1/en/query-log.html

    将会有更多的疑问,不仅仅是你正在寻找的疑问,而是你可以为之祈祷。

    但通常->getSql(); 作品

    编辑:

    查看我使用的所有mysql查询

    sudo vim /etc/mysql/my.cnf 
    

    并添加这两行:

    general_log = on
    general_log_file = /tmp/mysql.log
    

    并重新启动mysql

    链接地址: http://www.djcxy.com/p/44873.html

    上一篇: How to print out the real sql, not just the prepared statement?

    下一篇: SQL injections with prepared statements?