Doctrine DBAL 2.13 $statement->execute() 返回 bool(而不是 Result)

Posted

技术标签:

【中文标题】Doctrine DBAL 2.13 $statement->execute() 返回 bool(而不是 Result)【英文标题】:Doctrine DBAL 2.13 $statement->execute() returns bool (instead of Result) 【发布时间】:2021-06-27 11:24:10 【问题描述】:

自 Doctrine DBAL 2.13 发布以来,已添加弃用,如 here 所述。

虽然获取结果的旧方法是这样的:

$statement->execute();
while (($row = $statement->fetch()) !== false) 

新的方式是这样的:

$result = $statement->execute();
while (($row = $result->fetchAssociative()) !== false) 

我想更新我的代码以便为学说/dbal 3.0 做好准备,但是$statement->execute() 不返回结果集,而只是返回一个布尔值,所以没有什么可迭代的,即使发行说明指出:

DBAL 3.0 从 Statement API 中提取所有 fetch-methods 并移动 将它们发送到从 Statement::execute 返回的新结果 API。我们 已将此 A​​PI 向后移植到 2.13

这是否意味着反向移植失败或我遗漏了什么?

【问题讨论】:

提交了一个错误报告(github.com/doctrine/dbal/issues/4569),似乎已经在 2.13.1 中修复(现在需要发布)。 【参考方案1】:

更新到 2.13.1 学说/dbal(2021 年 4 月发布)并使用:

$result = $statement->executeQuery();
while (($row = $result->fetchAssociative()) !== false) 

请注意,executeQuery() 应该用于获取 Result 对象,因为 execute() 现在也已弃用。 (发行说明中也缺少这一点)

【讨论】:

以上是关于Doctrine DBAL 2.13 $statement->execute() 返回 bool(而不是 Result)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Doctrine DBAL?

工匠迁移错误“找不到类'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver'”,

使用 Doctrine/DBAL 迁移数据库时如何修复未知数据库错误?

执行多个查询时的 Doctrine (DBAL) 错误处理

PostgreSQL 咨询锁不适用于 Doctrine 的 DBAL

在作曲家 laravel 上安装依赖项(doctrine/dbal)