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

标签 php mysql doctrine-orm symfony-2.8

我刚刚遇到 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 那里得到非常奇怪的行为。很少有查询在从 Doctrine ORM 执行时不返回结果,但在直接执行时可以正常工作。

最佳答案

我确实解决了这个问题。它与使用 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

关于php - Symfony2 + Doctrine INSERT 查询失败且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391567/

相关文章:

PHP 显示 GMT 格式的 Unix 时间戳

mysql - 如何在日期列上创建索引

caching - 如何在 symfony2 存储库中指定查询结果缓存?

php - 添加集合/实体会使表单渲染非常慢

symfony - 在所有列上创建索引的简写

php - MySQL查询选择数据

php - 从 php 类调用函数

php - 如何防止 CodeIgniters 打印 PHP 错误

php - Laravel Eloquent 创建于

php - mySQL复杂的条件连接查询可提高多个查询和PHP的效率