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

Symfony2 + Doctrine INSERT query fails without error

我刚刚遇到 Symfony2 和 Doctrine ORM 的一个非常奇怪的问题。它停止在我的一个表中插入数据,过去几个月确实没有进行任何更改,但它开始失败,尽管没有 Doctrine 异常或任何东西,探查器显示插入执行得恰到好处。该实体收到 ID 0 并且数据库中没有记录。

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

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

我曾尝试使用命令行直接执行相同的查询,但效果很好。

我使用的是 Symfony 2.8,Doctrine 版本是 2.7.2 用于 Doctrine\Common、Doctrine\ORM - 2.5.6(根据 composer.lock)

编辑

我刚开始从 Doctrine 那里得到非常奇怪的行为。很少有查询 return 从 Doctrine ORM 执行时没有结果,但直接执行时工作正常。

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

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

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

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