You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows服务器PHP7.4无法连接PostgreSQL数据库求助

问题解决方法

核心问题分析

错误提示missing "=" after "tls.crt",根源有两个:

  1. Windows路径中的单反斜杠被PHP当作转义字符,导致连接字符串解析混乱
  2. 连接参数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";
}

?>

额外验证要点

  1. 确认php.ini中extension=pgsql和extension=pdo_pgsql已取消注释,重启IIS服务确保扩展生效
  2. 检查证书文件权限,确保IIS运行账户(如IUSR或应用池标识)拥有证书文件的读取权限
  3. 可通过file_exists($sslcert)函数验证证书路径是否正确指向有效文件

内容的提问来源于stack exchange,提问作者Vignesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:16:34