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
我刚刚遇到 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