我只是遇到了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执行时,很少有查询返回任何结果,但直接执行时可以正常工作。
答案 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