Symfony2 + Doctrine INSERT查询失败,没有错误

时间:2017-06-06 13:37:05

标签: php mysql doctrine-orm symfony-2.8

我只是遇到了Symfony2和Doctrine ORM的一个非常奇怪的问题。它停止在我的一个表中插入数据,在过去的几个月里没有真正改变,但它开始失败,虽然没有Doctrine异常或任何东西,分析器显示插入执行恰到好处。实体收到ID 0,数据库中没有记录。

这只是映射实体的基本persist + flush组合。是的,实体已映射(也在探查器中检查)。

我想知道是否有任何情况下Doctrine不会抛出异常,尽管查询没有执行/不成功?我不知道在哪里寻找它。我确实检查了所有可能的配置。抛出没有异常。这一切看起来都非常好,应该是这样,但是没有插入数据。

我确实尝试使用命令行直接执行相同的查询,它运行正常。

我正在使用Symfony 2.8,Doctrine版本是 2.7.2 for Doctrine \ Common,Doctrine \ ORM - 2.5.6(根据composer.lock)

修改

我刚开始从整个地方的Doctrine那里得到非常奇怪的行为。从Doctrine ORM执行时,很少有查询返回任何结果,但直接执行时可以正常工作。

1 个答案:

答案 0 :(得分:1)

我确实解决了这个问题。它与使用PDO::ATTR_EMULATE_PREPARES的PDO / DBAL和MySQL编写的语句模拟有关(你可以阅读它here)。

只需将此选项恢复为true即可解决问题。我不得不调整依赖于false的其他代码部分。

万一有人遇到这种问题,在Symfony2中我就是这样配置的,只需删除选项20即可恢复默认值。请记住,任何返回整数的DBAL查询(可能还有其他类型)都将返回字符串。

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                options:
                    20: false // if you have this line and value set to false or 0, just remove it, this option defaults to true
相关问题