【发布时间】: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