PHP PDO + PostgreSQL连接错误:找不到驱动程序

时间:2018-05-08 15:18:04

标签: php database postgresql apache pdo

有一些类似的问题,我已经阅读并遵循建议,但没有尽头,只有相当新的,我觉得现在是停止尝试'如果我打破任何进一步的事情。

我尝试通过PDO连接到我的数据库时收到以下错误:

Connection error: could not find driver

1。我确保Apache链接到我的自制PHP。

    $ which php
    /usr/local/bin/php

2。在php.ini

中取消注释以下内容
extension=php_pdo_pgsql.dll

pdo_pgsql模块显示在php_info

第3。我的数据库连接是:

    <?php
        class Database
        {
            public $conn;
            public function getConnection()
            {

                try {
                    $this->conn = new PDO("postgres://$user:$pass@$host:$port/$db_name");
                    print_r($this->conn);
                    $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $this->conn->exec("set names utf8");
                } catch (PDOException $exception) {
                    echo "Connection error: " . $exception->getMessage();
                    exit();
                }

                return $this->conn;
            }
        }

我已经对这些细节进行了三次检查,并且它们是正确的(尽管已省略)。我可以通过IntelliJ的数据库连接向导

连接相同的URI

4。我已修改 /usr/local/var/postgres/postgresql.conf 以包含:

#listen_addresses = '*' 

我仍然没有运气,正在寻找这个头脑中的一些指导。

1 个答案:

答案 0 :(得分:0)

我看到你正在使用Linux,但尝试启用.dll库,用于Windows机器。评论这一行是有道理的。

确保已启用pdo_pgsql模块:

# php -m | grep pdo_pgsql
pdo_pgsql

如果不是

,请安装它
# yum install php-pgsql

Here is steps我在我的干净的CentOS 7安装上使PHP + PostgreSQL工作:

  1. 安装PostgreSQL(但我认为你已经安装了这个和         配置的)

    # yum install postgresql-server postgresql-contrib
    
  2. 更新了配置/var/lib/pgsql/data/pg_hba.conf,从ident更改为md5

    host    all             all             127.0.0.1/32            ident
    host    all             all             ::1/128                 ident
    

    host    all             all             127.0.0.1/32            md5
    host    all             all             ::1/128                 md5
    

    重新启动postgresql服务

    # service postgresql restart
    
  3. 安装PHP和PDO连接器

    # yum install php php-pgsql
    
  4. 以下是我用来测试连接的PHP脚本示例:

    <?php
    
    //  Configure DB Parameters
    $host = "localhost";
    $dbname = "masterdb";
    $dbuser = "automation";
    $userpass = "fGmK4hvDZPB6fr6c";
    
    $dsn = "pgsql:host=$host;port=5432;dbname=$dbname;user=$dbuser;password=$userpass";
    
    try{
     // create a PostgreSQL database connection
     $conn = new PDO($dsn);
    
     // display a message if connected to the PostgreSQL successfully
     if($conn){
     echo "Connected to the $dbname database successfully!";
     echo "\n";
     }
    }catch (PDOException $e){
     // report error message
     echo $e->getMessage();
    }
    

    输出:

    # php pdo_test.php
    Connected to the masterdb database successfully!