提问人:RTC222 提问时间:6/1/2019 最后编辑:ReynierPMRTC222 更新时间:4/28/2020 访问量:15049
如何在 Ubuntu 上为 Postgres 启用 php pdo 驱动程序 18.04
how to enable php pdo driver for Postgres on Ubuntu 18.04
问:
我在 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,但我仍然收到相同的错误消息。
感谢您的任何想法。
答:
11赞
ReynierPM
6/1/2019
#1
我认为您缺少库,运行以下命令,它应该开始工作(保留 php.ini 文件的更改):php-pgsql
sudo apt install php-pgsql
sudo service apache2 reload
我没有 Ubuntu,这意味着库名称可能不同。
希望对您有所帮助
评论
0赞
RTC222
6/1/2019
谢谢你的回答。我现在正在研究这个问题,我会回帖的。
0赞
RTC222
6/1/2019
我这样做了,但仍然收到错误“找不到驱动程序”。此外,扩展目录 /usr/lib/php/20180731 中没有 pdo_pgsql.so 或 pgsql.so 文件。我做了php -i |grep pdo_pgsql.so,它不返回任何内容。
0赞
ReynierPM
6/1/2019
你看到正在安装的库了吗?正如我所说,我没有 Ubuntu,所以我无法搜索正确的库名称,请尝试使用 apt-cache search php-*' 并查找 pgsql。(官方文档 php.net/manual/en/pgsql.installation.php 说我是对的)
0赞
RTC222
6/1/2019
我确实看到了正在安装的库。apt-cache 指令,我看到“php7.3-pgsql - PHP 的 PostgreSQL 模块”,但pdo_pgsql什么都没有。我需要 pdo,也许有一个单独的安装,但我没有看到任何单独安装的说明。
0赞
ReynierPM
6/3/2019
尝试安装该软件包,我认为它确实以某种方式安装了 PDO,我可能是错的。如果它没有安装,那么搜索它,就像这样......并安装那个php7.3-pgsql
apt-cache search php-pdo
1赞
Glorious Kale
4/28/2020
#2
除了别人说的,试试
sudo phpenmod pdo_pgsql
评论