首页 > 代码库 > PHP连接PostgreSQL连接问题

PHP连接PostgreSQL连接问题

 

/var/lib/pgsql/data/pg_hba.conf

 

CentOS 6.3下PostgreSQL 的安装与配置

http://www.cnblogs.com/mchina/archive/2012/06/06/2539003.html

postgresAdmin3

http://www.cnblogs.com/mchina/archive/2012/06/06/2539003.html

 

http://jingyan.baidu.com/article/3ea51489ec3cb452e71bba52.html

 

http://developer.51cto.com/art/201401/426225.htm

 

调试方法

[root@linux ~]# php /var/www/html/pgsql.php
PHP Warning:  pg_connect(): Unable to connect to PostgreSQL server: FATAL:  Ident authentication failed for user "postgres" in /var/www/html/pgsql.php on line 3
连接失败,不能连接到数据库[root@linux ~]#

看起来是帐号密码的问题

PostgreSQL 数据库默认会创建一个postgres的数据库用户作为数据库的管理员,默认密码为空,我们需要修改为指定的密码,这里设定为’postgres’。

 

# su - postgres

 

$ psql

 

postgres=# ALTER USER postgres WITH PASSWORD ‘postgres‘;
ALTER ROLE
postgres=# select * from pg_shadow ;
 usename  | usesysid | usecreatedb | usesuper | usecatupd |               passwd
                | valuntil | useconfig
----------+----------+-------------+----------+-----------+---------------------
----------------+----------+-----------
 dbuser   |    16384 | f           | f        | f         | md5baa6c789c3728a1a4
49b82005eb54a19 |          |
 postgres |       10 | t           | t        | t         | md53175bce1d3201d165
94cebf9d7eb3f9d |          |
(2 rows)

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileg
es   
-----------+----------+----------+-------------+-------------+------------------
-----
 david     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/post
gres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/post
gres
 testdb    | dbuser   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/dbuser
                                                             : dbuser=CTc/dbuser
(5 rows)

postgres=# ALTER USER dbuser WITH PASSWORD ‘dbuser‘;
ALTER ROLE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileg
es   
-----------+----------+----------+-------------+-------------+------------------
-----
 david     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/post
gres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                             : postgres=CTc/post
gres
 testdb    | dbuser   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/dbuser
                                                             : dbuser=CTc/dbuser
(5 rows)

不过仍然有Ident authentication failed for user错误,

尝试修改 /var/lib/pgsql/data/pg_hba.conf, 去掉

#host    all         all         127.0.0.1/32          ident


service postgresql restart

service httpd restart

service postgresql restart

重新执行php,发现这次dbuser能访问了,只是dbuser 数据库不存在

[root@linux ~]# php /var/www/html/pgsql.php
PHP Warning:  pg_connect(): Unable to connect to PostgreSQL server: FATAL:  database "dbuser" does not exist in /var/www/html/pgsql.php on line 3
连接失败,不能连接到数据库[root@linux ~]#

 

修改php脚本:

<?php
// 连接,选择数据库
$dbconn = pg_connect("host=127.0.0.1 dbname=david user=dbuser password=dbuser");
//see if our connection was successful
if (!$dbconn) {
    //connection failed - exit the page with an error
    //you could also try to proceed without the
    //database - it‘s up to you
     echo "连接失败,不能连接到数据库";
    exit;
}else{
    echo "连接成功";
}
echo "<br>php配置详细信息如下:";
echo phpinfo();
// 关闭连接
pg_close($dbconn);
?>

这次命令行执行php 可以成功显示数据,但是用firefox执行该脚本,仍然显示error , Why?