我正在使用 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/homestead 版本 14.0.2 时,我得到了这个错误,为什么代码支持 8.2.1。
降级 vagrant -box 解决了我的问题。所以它与新版本或旧版本的学说/dbal 有关。