Windows服务器PHP7.4无法连接PostgreSQL数据库求助
问题解决方法
核心问题分析
错误提示missing "=" after "tls.crt",根源有两个:
- Windows路径中的单反斜杠被PHP当作转义字符,导致连接字符串解析混乱
- 连接参数
sslmode = require中存在多余空格,破坏了PostgreSQL连接字符串的参数格式规范
具体修复步骤
- 修正路径转义:将Windows路径中的单反斜杠
\替换为双反斜杠\\,或者改用正斜杠/,确保PHP能正确识别证书文件路径 - 清理参数空格:移除
sslmode = require中的空格,改为sslmode=require,符合参数键值对的格式要求
修复后的代码
<?php $host = "wer.wp-postgres-prd01.carbon.abc.com"; $port = 41101; $dbname = "****"; $user = "****"; $password = "****"; // 使用双反斜杠转义Windows路径 $sslcert = "D:\\Inetpub\\WWWRoot\\windows\\pgcerts\\tls.crt"; $sslkey = "D:\\Inetpub\\WWWRoot\\windows\\pgcerts\\tls.key"; $sslrootcert = "D:\\Inetpub\\WWWRoot\\windows\\pgcerts\\ca.crt"; // 修正sslmode参数格式,移除多余空格 $conn = pg_connect("host=$host port=41101 dbname=$dbname user=$user password=$password sslmode=require sslcert=$sslcert sslkey=$sslkey sslrootcert=$sslrootcert"); if (!$conn) { $error = error_get_last(); echo "Connection failed. Error message: " . $error['message'] . "\n"; } else { echo "Connected successfully"; } ?>
额外验证要点
- 确认
php.ini中extension=pgsql和extension=pdo_pgsql已取消注释,重启IIS服务确保扩展生效 - 检查证书文件权限,确保IIS运行账户(如IUSR或应用池标识)拥有证书文件的读取权限
- 可通过
file_exists($sslcert)函数验证证书路径是否正确指向有效文件
内容的提问来源于stack exchange,提问作者Vignesh
相关产品推荐
相关产品推荐

