PHP PDO + PostgreSQL Ошибка подключения: не удалось найти драйвер - PullRequest
0 голосов
/ 08 мая 2018

Есть несколько похожих вопросов, которые я прочитал и следовал совету, но без конца, и, будучи достаточно новичком в этом, я подумал, что сейчас хорошее время, чтобы прекратить «пробовать» вещи на случай, если я что-нибудь сломаю. в дальнейшем.

При попытке подключиться к базе данных через 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;
            }
        }

Я трижды проверил эти данные, и они верны (хотя и опущены). Я могу подключиться с тем же URI через Мастер подключения к базе данных IntelliJ

4. Я отредактировал /usr/local/var/postgres/postgresql.conf , чтобы включить:

#listen_addresses = '*' 

Мне все еще не повезло, и я смотрю на некоторые указания в этом скребке головы.

1 Ответ

0 голосов
/ 09 мая 2018

Как я вижу, вы используете Linux, но попытались включить библиотеку .dll, которая используется для компьютеров Windows. Имеет смысл прокомментировать эту строку.

Убедитесь, что у вас включен модуль pdo_pgsql:

# php -m | grep pdo_pgsql
pdo_pgsql

Установите его, если не

# yum install php-pgsql

Вот шаги , которые я сделал, чтобы PHP + PostgreSQL работал на моей чистой установке CentOS 7:

  1. Установите PostgreSQL (но я думаю, что вы уже установили это и сконфигурировано)

    # yum install postgresql-server postgresql-contrib
    
  2. Обновлен конфиг /var/lib/pgsql/data/pg_hba.conf, изменен с id на md5

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

    * После 1023 *

    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
    

Вот пример 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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...