【问题标题】:How to display the SQL query that causes a PDOException in Doctrine如何在 Doctrine 中显示导致 PDOException 的 SQL 查询
【发布时间】:2011-10-18 00:52:45
【问题描述】:

我正在使用 Doctrine 2 和 PHPUnit,当然,有时会出现问题。这就是单元测试的全部内容。但是当我出于某种原因收到 PDOException 时,我看不到导致它的查询。示例:

$ phpunit --group database
PHPUnit 3.5.14 by Sebastian Bergmann.

E

Time: 2 seconds, Memory: 14.75Mb

There was 1 error:

1) My\Tests\Entity\MyMappingTest::testLoad
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't11.id' in 'on clause'

/usr/local/svn/php5/libraries/Doctrine/DBAL/Connection.php:613
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:569
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:624
/usr/local/svn/php5/libraries/Doctrine/ORM/UnitOfWork.php:1979
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php:139
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php:44
/usr/local/svn/php5/libraries/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php:99
/usr/local/svn/php5/libraries/Doctrine/ORM/Persisters/BasicEntityPersister.php:580
/usr/local/svn/php5/libraries/Doctrine/ORM/EntityRepository.php:130
/usr/local/svn/php5/libraries/Doctrine/ORM/EntityManager.php:350


FAILURES!
Tests: 1, Assertions: 1, Errors: 1.

这一切都很好,但我如何告诉 Doctrine 或 PHPUnit 给我导致此异常的 SQL 查询,以便我有调试它的希望?现在,这个例外有点没用。我尝试 var_dumping 异常对象,但这只是永远递归。我当然应该可以告诉 Doctrine 给我更多的信息?

【问题讨论】:

    标签: php exception phpunit doctrine-orm


    【解决方案1】:

    您可以enable native Doctrine SQL logging,或者更努力地实现Doctrine\DBAL\Logging\SQLLogger 来存储最后一个查询并覆盖PHPUnit_Framework_TestCase::onNotSuccessfulTest() 以在PDOException 的情况下为其添加一个新异常。不幸的是,您将丢失原始堆栈跟踪,但 PHP 不允许在创建异常消息后更改它。 :(

    在配置对象上使用setSQLLogger() 以使用您的记录器。在 PHPUnit bootstrap.php 中执行此操作,并使其可用于您的测试用例基类。

    【讨论】:

    • 谢谢,这听起来不错。明天我回来工作时我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多