【问题标题】:PHP Connection to Postgre SQL ErrorPHP 连接到 Postgresql 错误
【发布时间】:2014-09-09 18:10:29
【问题描述】:

我以前从未连接到 PostgreSQL 数据库,所以这是全新的领域。我正在创建我们在办公室为我们创建的桌面应用程序的 Intranet 版本。我目前安装了桌面应用程序,它连接到 PostgreSQL 数据库(在网络服务器上),没有任何问题。我已经安装了 PostgreSQL odbc 驱动程序,当我在控制面板中使用 ODBC 数据源管理器测试连接时,我得到了一个成功的测试连接。我的问题是当我尝试使用所有相同信息通过 PHP 脚本直接连接时。我收到此错误:

Warning: odbc_connect(): SQL error: FATAL: no pg_hba.conf entry for host "10.0.1.218", user "", database "", SSL off, SQL state 28000 in SQLConnect

我知道我可以去服务器并更改连接设置(如果 IT 允许我更改服务器的文件...不指望那个)。

我的设置是:Windows XP、XAMPP v. 1.8.2、PHP 5.4、Postgre SQL 驱动程序 9.03.03。我通过 ODBC 数据源管理器的连接信息是:

Data Source - PostgreSQL
Database - db
Server - 10.0.0.149
User Name - user
SSL Mode - require
Port - 5432
Password - password
Driver - PostgreSQL Unicode

来自桌面应用程序的连接字符串是:

sDeeperConnection = "Server=10.0.0.149;Database=db;User Id=user;Password=password;SSL=true;Pooling=false";

我在 PHP 中创建的连接字符串是:

$dsn='10.0.0.149';
$username='user';
$password='password';
$dbname='db';

$odb = odbc_connect("Driver={PostgreSQL Unicode};Server=$dsn;SSL=true;Pooling=false;Port=5432;Database=$dbname;", $username, $password);

我确实注意到当我运行 PHP 脚本时出现的错误表明 SSL '关闭',即使我已将其设置为 true,但我不知道如何更改它。我在 ODBC 数据源管理器中尝试过“要求”,但无济于事。对我来说,这个错误(除了 SSL 问题)似乎没有意义。我可以在我的计算机上以两种不同的方式连接到 PostgreSQL 数据库:桌面​​应用程序和 ODBC 数据源管理器。因此,在我看来,主机“10.0.1.218”没有条目的问题应该不是问题。我也尝试过将我使用的驱动程序从 PostgreSQL Unicode 更改为 PostgreSQL ANSI,但这也不成功。

在从这些行 php.ini 中删除 ; 后,我尝试使用具有相同连接参数的 pg_connect() 函数:

;extension=php_pdo_pgsql.dll
;extension=php_pgsql.dll

但我收到了同样的错误。我认为这与 SSL 有关,但我不知道从哪里开始使用 SSL 测试/调试连接。这个问题有点困难,因为我无权访问服务器并且访问更改文件就像拔钉子一样。

任何想法或其他选择都会很棒!提前谢谢!

编辑 在我的 phpinfo 中查看这是我所看到的:

pgsql
PostgreSQL Support  enabled
PostgreSQL(libpq) Version   8.3.3
PostgreSQL(libpq)   PostgreSQL 8.3.3, compiled by Visual C++ build 1500
Multibyte character support     enabled
SSL support     enabled
Active Persistent Links     0
Active Links    0 

openssl
OpenSSL support     enabled
OpenSSL Library Version     OpenSSL 0.9.8y 5 Feb 2013
OpenSSL Header Version  OpenSSL 0.9.8y 5 Feb 2013 

再次编辑

我根据下面的 cmets 下载了 pgAdmin III 并设置了连接,我连接得很好。所以我知道这不是主机。我猜这与 SSL 设置有关。我只是不知道为什么/如何......啊......

【问题讨论】:

  • 当您尝试使用pg_connect 时,您是否通过sslmode=require 并使用libpq 的连接字符串语法,例如host=localhost port=5432 dbname=mydb connect_timeout=10?
  • @tsnorri 我以为我有,但我不记得这个错误:无法连接到 PostgreSQL 服务器:未编译 SSL 支持时 sslmode 值“require”无效。这就是我现在得到的。我正在研究如何解决该错误。如果你有什么建议,我会欢迎的。
  • @tsnorri 我已经尝试了第一个 stackoverflow 链接中的建议,但仍然遇到同样的错误。还有其他想法吗?

标签: php postgresql ssl odbc


【解决方案1】:

在针对类似但不同的问题进行了更多挖掘和阅读大量解决方案之后,我遇到了一个建议,有人提出将libpq.dll 从我的c:\xampp\php 文件夹复制到我的C:\xampp\apache\bin 文件夹。我不得不覆盖该目录中现有的libpq.dll 文件。然后我又遇到了一个错误:

pg_connect(): Unable to connect to PostgreSQL server: FATAL: password authentication failed for user

在阅读更多随机问题后,其他人遇到了一个问题,即无论使用或未使用密码,都会创建连接。所以,我决定取出连接字符串中的密码,它成功了!感谢所有评论并让我寻找解决方案的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2018-12-18
    • 2015-11-18
    相关资源
    最近更新 更多