未启用Postgres的PHP PDO,即使在PHP.ini文件中已启用

未启用Postgres的PHP PDO,即使在PHP.ini文件中已启用,php,postgresql,pdo,Php,Postgresql,Pdo,我使用带有命名占位符的PDO将记录插入到Postgres数据库表中,但出现了一个错误。我没有打开PHP错误日志,所以我启用了它,进入PHP_errors.log(我创建了新的日志文件) 新的错误日志仅显示两个启动警告: [13-Aug-2019 17:26:08 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20180731/pdo_pgsql (/u

我使用带有命名占位符的PDO将记录插入到Postgres数据库表中,但出现了一个错误。我没有打开PHP错误日志,所以我启用了它,进入PHP_errors.log(我创建了新的日志文件)

新的错误日志仅显示两个启动警告:

[13-Aug-2019 17:26:08 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20180731/pdo_pgsql (/usr/lib/php/20180731/pdo_pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/pdo_pgsql.so (/usr/lib/php/20180731/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0

[13-Aug-2019 17:26:08 UTC] PHP Warning:  Module 'pgsql' already loaded in Unknown on line 0
不管警告怎么说,文件/usr/lib/php/20180731/pdo_pgsql.so仍然存在。在我的php.ini文件中,以下行未注释:

extension=pdo_pgsql
extension=pgsql
我认为这就是我需要做的所有事情来启用pdo。然而,在我的phpinfo网页中没有pdo条目,这是应该的,所以看起来pdo不存在,即使pgsql至少可以登录到Postgres数据库

我确实知道php正在使用Postgres,因为当我在没有数据库插入代码的情况下运行脚本(仅登录到Postgres)时,开发控制台会显示一条成功消息(“成功连接到数据库”)

我的问题是:我还需要做什么才能启用pdo

这是完整的脚本文件,尽管这个问题可能不需要它。正如我所说,如果没有下面的try-catch块,开发控制台将报告成功登录到Postgres数据库,但是当我使用pdo记录插入代码启用try-catch块时,它将失败,显然是因为pdo未启用

<?php
echo 'Hello ' . htmlspecialchars($_POST["firstname"]) . '!' ;
$dsn = vsprintf('pgsql:host=%s;port=%s;dbname=%s;user=%s;password=%s',  [
    'host' => 'xx.xxx.xxx.xxx',
    'port' => '5432',
    'dbname' => 'dbname',
    'user' => 'username',
    'password' => 'password',
]);

echo $dsn;
echo PHP_EOL;

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 database successfully!";
 }
}catch (PDOException $e){
 // report error message
 echo $e->getMessage();
}

$fields = array('date', 'email', 'firstname', 'lastname', 'password',   'comments', 'sendupdates');
$fieldlist = implode(',', $fields);

echo $fieldlist;
echo PHP_EOL;

    $datefield = $_POST['datefield'];
    $email_field = $_POST['email_field'];
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $password = $_POST['password'];
    $comments = $_POST['comments'];
    $custom_checkbox = $_POST['custom_checkbox'];

echo $datefield;
echo PHP_EOL;
echo $email_field;
echo PHP_EOL;
echo $firstname;
echo PHP_EOL;

echo $lastname;
echo PHP_EOL;
echo $password;
echo PHP_EOL;
echo $comments;
echo PHP_EOL;
echo $custom_checkbox;
echo PHP_EOL;


try {

    $datefield = $_POST['datefield'];
    $email_field = $_POST['email_field'];
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $password = $_POST['password'];
    $comments = $_POST['comments'];
    $custom_checkbox = $_POST['custom_checkbox'];

    $data = [
        'date' => $datefield,
        'email' => $email_field,
        'firstname' => $firstname,
        'lastname' => $lastname,
        'password' => $password,
        'comments' => $password,
        'checkbox' => $custom_checkbox,
    ];

    $sql = "INSERT INTO psq01 (date, email, firstname, lastname, password, comments, sendupdates) VALUES (:date, :email, :firstname, :lastname, :password, :comments, :checkbox)";

    $stmt= $pdo->prepare($sql);
    $stmt->execute($data);

} catch (PDOException $e) {
    error_log($e->getMessage());
}

$conn = null;

?>

那么,我还需要什么来启用PDO呢?我使用的是Ubuntu 18.04


谢谢你在这方面的帮助

该错误的可能重复通常是由于使用了错误版本的扩展而导致的。每个扩展都必须针对将加载它的兼容版本的PHP进行编译。不要重复,因为我以前没有安装过PHP pgsql。我会再试一次。对于@Vahid Amiri——通常的方法是apt-get-install-php-pgsql——有什么方法可以指示版本吗?我使用的是PHP7.3。@如果您使用的是64位PHP,请确保将扩展编译为64位二进制。即使这个错误看起来是关于错误的扩展目录,但它可能是关于其他事情的。这个错误的可能重复通常是由于使用了错误的扩展版本造成的。每个扩展都必须针对将加载它的兼容版本的PHP进行编译。不要重复,因为我以前没有安装过PHP pgsql。我会再试一次。对于@Vahid Amiri——通常的方法是apt-get-install-php-pgsql——有什么方法可以指示版本吗?我使用的是PHP7.3。@如果您使用的是64位PHP,请确保将扩展编译为64位二进制。尽管这个错误看起来可能与错误的扩展目录有关,但它可能与其他事情有关。