gpt4 book ai didi

php - 重用学说实体管理器使用的数据库连接

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:24 25 4
gpt4 key购买 nike

Doctrine 将 native 的、特定于驱动程序的数据库连接资源句柄封装在其连接类中。我说的是从例如 mysqli_connect() 返回的资源。我看不到任何访问原始连接资源的方法——我找不到任何 getter 方法。这种强大的封装可能是在暗示我不应该尝试访问和使用它,但当然,这正是我想要做的。

如果我从同一个连接发出只读选择查询会不会造成任何问题?我不确定 doctrine 的工作流程在幕后是如何运作的。数据库连接是有状态的,我有点害怕我可能会在 doctrine 有一些多步事务部分正在进行时跳入并发出 sql 查询,这显然会导致问题。但是由于 php 的单线程特性,我认为在实践中它很有可能是不可能的,这取决于学说是如何工作的。

旁白:我这样做的原因是为了性能。我有一些其他代码不是用 doctrine 编写的,它需要原始数据库连接,因为它使用 native 数据库扩展函数。我可以只打开另一个数据库连接,但打开第二个连接对我的场景有显着的性能影响......这使得尝试重用学说连接非常有吸引力。

最佳答案

尝试 getWrappedConnection 它返回 Doctrine\DBAL\Driver\PDOConnection 的实例,它是 \PDO 的包装器:

$connection = $this->getEntityManager()
->getConnection()
->getWrappedConnection();

$stmt = $connection->prepare('SELECT * FROM `City`');
$stmt->execute();

附言我相信重用现有连接而不是创建新连接是完全正常的。我在一个有 Doctrine1 和 Doctrine2 的项目中这样做。

关于php - 重用学说实体管理器使用的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com