如何在Ubuntu 18.04上为Postgres启用php pdo驱动程序

时间:2019-05-31 17:17:04

标签: php pdo

我在Ubuntu 18.04上安装了php 7.2和php 7.3,并创建了一个php文件登录到Postgres数据库并将数据插入Postgres数据库。我的脚本回答“找不到驱动程序”。

研究发现,我必须编辑php.ini文件并启用Postgres和PDO的扩展名。以下是php.ini文件中的所有extension =行。我能找到的最接近的是下面显示的pdo线。

extension=pdo_pgsql
extension=pgsql

因此,我编辑了php.ini文件,并从每行中删除了分号以启用它们。然后我重新启动了Apache2:

sudo systemctl restart apache2

但是我仍然得到“找不到驱动程序”。

这是php.ini文件扩展的完整列表。我需要启用哪些其他扩展以允许PDO访问Postgres?

php.ini 7.3

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
extension=pgsql
;extension=shmop

php.ini 7.2

;extension=bz2
;extension=curl
;extension=fileinfo
;extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
;extension=pdo_sqlite
extension=pgsql
;extension=shmop

这是php登录脚本(此处登录凭据已替换为伪值,因为我无法透露它们):

<?php

$params = [
    'host' => '[IP Address]',
    'user' => '[username]',
    'pwd' => '[password]',
    'db' => '[dbname]'
];

$dsn = sprintf('pgsql:host=%s;dbname=%s;user=%s;password=%s',
    $params['host'],
    $params['db'],
    $params['user'],
    $params['pwd']);

try {
    $dsn = sprintf('pgsql:host=%s;dbname=%s;unix_socket=%s',
        $params['host'], $params['db'], $params['sock']);
    $opts = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
    $pdo = new PDO($dsn, $params['user'], $params['pwd'], $opts);
} catch (PDOException $e) {
    echo $e->getMessage();
} catch (Throwable $e) {
    echo $e->getMessage();
}

?>

然后,我编辑了两个.ini文件,并在这两行的每一行末尾添加了“ .so”,然后重新启动了Apache2,但仍然收到相同的错误消息。

感谢任何想法。

2 个答案:

答案 0 :(得分:0)

我认为您缺少php-pgsql库,请运行以下命令,它应该开始工作(保留php.ini文件的更改):

sudo apt install php-pgsql
sudo service apache2 reload

我没有Ubuntu,这意味着库名可能不同。

希望有帮助

答案 1 :(得分:0)

除了别人说的以外,请尝试

sudo phpenmod pdo_pgsql