Symfony 6.2.6中如何修改数据库连接超时时间?
Symfony 6.2.6 Doctrine数据库连接超时配置不生效的解决办法
问题根源
你配置的options.timeout并非所有数据库驱动都认可的参数,不同数据库的连接超时参数名或配置方式存在差异,导致5秒超时设置未生效。
针对不同数据库的解决方案
1. MySQL/MariaDB
有两种有效配置方式:
- 方式一:在DATABASE_URL中直接指定
修改.env里的DATABASE_URL,添加connect_timeout参数:DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=8.0&connect_timeout=5" - 方式二:在doctrine.yaml中使用mysqli常量配置
替换原有的timeout配置为对应mysqli常量:doctrine: dbal: connections: default: url: '%env(DATABASE_URL)%' mapping_types: bit: boolean options: !php/const mysqli::MYSQLI_OPT_CONNECT_TIMEOUT: 5
2. PostgreSQL
直接在DATABASE_URL中添加connect_timeout参数即可:
DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=15&connect_timeout=5"
或者在options中配置:
options: connect_timeout: 5
3. 额外注意:PHP全局socket超时
如果你的数据库连接使用Unix socket而非TCP/IP,PHP的default_socket_timeout配置会覆盖驱动级别的超时设置。可以:
- 临时在代码中设置:
ini_set('default_socket_timeout', 5); - 或者修改php.ini文件:
default_socket_timeout = 5
修正你的连接测试代码
你的代码存在语法错误,字符串拼接缺少.,修正后:
$conn = $doctrine->getConnection($dbName); try { $conn->connect(); } catch(Exception $e) { return "Failed to use database: " . $e->getMessage(); } if(!$conn->isConnected()) { return "Could not connect to database"; } return "Fine !";
内容的提问来源于stack exchange,提问作者Elikill58
相关产品推荐
相关产品推荐

