【问题标题】:Symfony2 + Doctrine INSERT query fails without errorSymfony2 + Doctrine INSERT 查询失败且没有错误
【发布时间】:2017-11-07 13:30:00
【问题描述】:

我刚刚遇到了 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 执行时,很少有查询不返回结果,但直接执行时确实可以正常工作。

【问题讨论】:

    标签: php mysql doctrine-orm symfony-2.8


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多