是否可以将 Doctrine 与持久 PDO 连接一起使用?
Posted
技术标签:
【中文标题】是否可以将 Doctrine 与持久 PDO 连接一起使用?【英文标题】:Is it possible to use Doctrine with persistent PDO connections? 【发布时间】:2013-04-19 12:08:00 【问题描述】:我正在尝试通过启用持久数据库连接来提高 volkszaehler.org 实现的性能。在将 Doctrine 的 Connection
类入侵到 PDO::ATTR_PERSISTENT => true
之后,我收到了 PDO 错误 General error: PDO::ATTR_STATEMENT_CLASS cannot be used with persistent PDO instances"
有没有办法解决这个问题?
【问题讨论】:
它坏了吗?连接池 PDO 提供的标准方式有什么问题?还是只是搔痒? 我已经看到 PDO 连接到 localhost 需要 1000 毫秒,并且正在调查持久连接是否无法解决此问题。 使用mysql原生驱动。查看统计数据。这可能会让你更好地了解在跳跃之前发生了什么。 How to know if MySQLnd is the active driver? 和 php.net/manual/it/mysqlnd.stats.php 不幸的是,Doctrine 仅适用于 PDO? 【参考方案1】:您可以将自己的 PDO 实例传递给 Doctrine,自己设置持久连接:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
'dbname' => 'mydb',
'user' => 'user',
'password' => 'secret',
'host' => 'localhost',
'pdo' => $dbh,
);
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
请务必了解使用 PDO 的持久连接的含义:What are the disadvantages of using persistent connection in PDO
【讨论】:
如何处理错误消息?我的问题不是我不知道如何创建持久连接??? 您真的尝试过我的解决方案吗?由于它不使用 Doctrines 自己的 PDOConnection,因此它实际上不应设置 PDO::ATTR_STATEMENT_CLASS,因此您的错误应该消失了。 对不起,我没有意识到这些联系。它确实有效,非常感谢!更新:你能更新分析器以便我投票吗? 这已经显着提高了我的开发机器的性能(每个请求 0.5 秒而不是 1.5 秒)。不幸的是,它对生产没有帮助。我怀疑 prod 机器不允许持久连接(?),但不知道如何测试/调整哪个配置。无论如何,很好的答案,谢谢!以上是关于是否可以将 Doctrine 与持久 PDO 连接一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
Prooph Eventstore (PDO) 和 Doctrine DBAL 导致多个连接