【问题标题】:how to enable php pdo driver for Postgres on Ubuntu 18.04如何在 Ubuntu 18.04 上为 Postgres 启用 php pdo 驱动程序
【发布时间】:2019-10-17 08:26:52
【问题描述】:

我在 Ubuntu 18.04 上安装了 php 7.2 和 php 7.3,并创建了一个 php 文件来登录并将数据插入 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,但我仍然收到相同的错误消息。

感谢您的任何想法。

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    除了别人说的,试试

    sudo phpenmod pdo_pgsql
    

    【讨论】:

      【解决方案2】:

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

      sudo apt install php-pgsql
      sudo service apache2 reload
      

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

      希望对你有帮助

      【讨论】:

      • 感谢您的回答。我现在正在处理这个问题,我会回复。
      • 我这样做了,但仍然收到错误“找不到驱动程序”。此外,扩展目录 /usr/lib/php/20180731 中没有 pdo_pgsql.so 或 pgsql.so 文件。我做了 php -i | grep pdo_pgsql.so 它什么也不返回。
      • 你看到库被安装了吗?正如我所说,我没有 Ubuntu,所以我无法搜索正确的库名称,尝试使用 apt-cache search php-*` 并查找 pgsql。 (官方文档php.net/manual/en/pgsql.installation.php 说我是对的)
      • 我确实看到了正在安装的库。 apt-cache 指令,我看到“php7.3-pgsql - PHP 的 PostgreSQL 模块”,但 pdo_pgsql 上没有。我需要 pdo,也许有一个单独的安装,但我没有看到任何单独安装的说明。
      • 尝试安装 php7.3-pgsql 包,我认为它确实安装了 PDO,我可能错了。如果它没有安装然后像apt-cache search php-pdo 这样搜索它....然后安装那个
      猜你喜欢
      • 2019-02-16
      • 2021-09-24
      • 1970-01-01
      • 2010-10-30
      • 2016-03-16
      • 2019-10-17
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多