gpt4 book ai didi

用于 Postgres 的 php pdo : "could not find driver"

转载 作者:行者123 更新时间:2023-11-29 12:50:03 28 4
gpt4 key购买 nike

我在用于 Postgres 的新 Ubuntu 18.04 服务器上安装了 php,但我遇到了 php 问题。这是我的 php 7.3 安装步骤:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php]
sudo systemctl restart apache2

安装PHP 7.3后,我安装了pgsql。

sudo apt install php-pgsql
sudo service apache2 reload

接下来,我编辑了/etc/php/7.3/apache2 中的 php.ini 文件,并从以下行中删除了分号:

extension=pdo_pgsql
extension=pgsql

我保存了文件并执行了 sudo systemctl restart apache2。

最后我启用了模块:

sudo phpenmod -v 7.3 pgsql
sudo phpenmod -v 7.3 pdo_pgsql
sudo systemctl restart apache2

然后我创建了一个脚本来使用 pdo 登录到我的 Postgres 数据库(这里的登录凭据被替换为占位符值。)

<?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();
}

?>

但是 Firefox 开发控制台回显:“找不到驱动程序。”

一个线索是 php 7.3 在/etc/apache2/mods-available 中,但它不在/etc/apache2/mods-enabled 中,这表明它没有启用。但是当我尝试 phpenmod -v 7.3 php7.3.conf 时,我得到:警告:/etc/php/7.3/mods-available 下不存在模块 php7.3.conf ini 文件。

我对此进行了大量研究,这些是要遵循的步骤。大部分研究都是针对 MySQL 的,但这对 PDO 应该无关紧要。

感谢您就我收到“找不到驱动程序”消息的原因提供任何想法。

更新:

我创建了一个脚本来运行 phpinfo():

<?php
ob_start();
phpinfo();
$info = ob_get_clean();
echo $info;
?>

但它只返回 html 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #fff; color: #222; font-family: sans-serif;}
pre {margin: 0; font-family: monospace;}
a:link {color: #009; text-decoration: none; background-color: #fff;}
a:hover {text-decoration: underline;}
table {border-collapse: collapse; border: 0; width: 934px; box-shadow: 1px 2px 3px #ccc;}
.center {text-align: center;}
.center table {margin: 1em auto; text-align: left;}
.center th {text-align: center !important;}
td, th {border: 1px solid #666; font-size: 75%; vertical-align: baseline; padding: 4px 5px;}
h1 {font-size: 150%;}
h2 {font-size: 125%;}
.p {text-align: left;}
.e {background-color: #ccf; width: 300px; font-weight: bold;}
.h {background-color: #99c; font-weight: bold;}
.v {background-color: #ddd; max-width: 300px; overflow-x: auto; word-wrap: break-word;}
.v i {color: #999;}
img {float: right; bo…
jquery.min.js line 2 > eval:12:21
?

但这不是我所期望的。

最佳答案

根据我们的谈话,问题是由于安装了多个版本的 PHP 而 Apache 加载的 PHP (7.2) 版本与预期的 PHP 7.3 不同。

要解决此问题,请运行以下命令:

sudo a2dismod php7.2
sudo a2enmod php7.3

这将禁止 Apache 加载 php7.2,而是加载 php7.3。


对于您的 DSN(数据源名称),您当前的配置使用的是 unix_socket,它似乎不是 postgresql DSN 的有效选项。此外,缺少用于 unix_socket 参数的 $params['socket']

有关详细信息,请参阅:https://www.php.net/manual/en/ref.pdo-pgsql.connection.php

如果数据库服务器正在监听默认端口(5432),您可以使用:

try {
$dsn = vsprintf('pgsql:host=%s;port=%s;dbname=%s;user=%s;password=%s', [
'host' => '[IP Address]',
'port' => '5432',
'dbname' => '[dbname]',
'user' => '[username]',
'password' => '[password]',
]);
$pdo = new PDO($dsn);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e->getMessage();
} catch (Throwable $e) {
echo $e->getMessage();
}

DSN 的结果应为:https://3v4l.org/aFKAW

pgsql:host=[IP Address];port=5432;dbname=[dbname];user=[username];password=[password]

关于用于 Postgres 的 php pdo : "could not find driver",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com