一般错误:PDO::ATTR_STATMENT_CLASS 不能与持久 PDO 实例一起使用

问题描述 投票:0回答:1

我正在使用 laravel 10 和 PostgreSQL 12.15 (Debian 12.15-1.pgdg120+1)。

为每个请求建立新连接需要一些时间,因此保持连接活动应该会使请求更快。因此我在

PDO::ATTR_PERSISTENT => true,
连接中添加了
pgsql

我的

database.php
看起来像:

'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'search_path' => 'public',
            'sslmode' => 'disable',
            'options' => [
                PDO::ATTR_PERSISTENT => true,
            ],
        ],

当我执行 php artisan db:migrate 时,出现以下错误。

PDOException 

  SQLSTATE[HY000]: General error: PDO::ATTR_STATEMENT_CLASS cannot be used with persistent PDO instances

  at vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:210
    206▕                 throw Exception::invalidPdoInstance();
    207▕             }
    208▕ 
    209▕             $this->_conn = $params['pdo'];
  ➜ 210▕             $this->_conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDODriverStatement::class, []]);
    211▕             unset($this->params['pdo']);
    212▕         }
    213▕ 
    214▕         if (isset($params['platform'])) {

      +10 vendor frames 
  11  database/migrations/2023_07_07_055322_modify_reports_table.php:34
      Illuminate\Support\Facades\Facade::__callStatic()

连接数据库时是否建议取消设置 PDO::ATTR_STATMENT_CLASS?我想使用持久连接。我没有使用任何自定义语句类。

有谁遇到过这个问题并可以帮助解决吗?

laravel postgresql pdo persistence laravel-10
1个回答
0
投票

对我来说,当我安装了 laravel/homestead 版本 14.0.2 时,我得到了这个错误,为什么代码支持 8.2.1。

降级 vagrant -box 解决了我的问题。所以它与新版本或旧版本的学说/dbal 有关。

© www.soinside.com 2019 - 2024. All rights reserved.