【问题标题】:PDO fails even though it is enabled on web server即使在 Web 服务器上启用 PDO 也会失败
【发布时间】:2019-06-08 02:59:33
【问题描述】:

我搬到了一个新的硬盘上,并据我所知复制了所有必要的东西。我尝试加载任何需要我的 PDO 数据库对象的页面,但它崩溃了。

这是错误:

致命错误:未捕获的错误:在 /var/www/the_website.net/config/DB.php:20 中找不到类“PDO”:堆栈跟踪:
#0 /var/www/the_website.net/public_html/index.php(16): DB->__construct()
#1 {main} 在第 20 行的 /var/www/the_website.net/config/DB.php 中抛出

这是 DB.php 中有问题的行(以及周围的几行):

public function __construct($username='username', $password='supersecretpassword', $host='localhost', $dbname='database', $options=[])
{
    $this->isConnected = true;
    try {
        $this->db_data = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8",$username, $password, $options);
        $this->db_data->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->db_data->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        throw new Exception($e->getMessage());
    }
}

这只是对象的创建。

这是我在 /etc/php/7.2/apache2/php.ini 中启用的模块(我只是做了所有这些,因为无论如何都没有工作):

extension=openssl
extension=pdo_firebird
extension=pdo.so
extension=pdo_mysql
extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite

这是 php -m 的结果

root@HAL4:/etc/php/7.2/apache2# php -m
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO <-- Still doesn't work
pdo_mysql <-- Nope. Still not working.
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

我已经为这两个模块运行了 phpenmod。

我以前的硬盘运行的是 php 7.0。现在我正在运行 php 7.2。

在测试页面中运行&lt;?php phpinfo(); ?&gt; 告诉我:

Configuration File (php.ini) Path   /etc/php/7.0/apache2
Loaded Configuration File   (none)
Scan this dir for additional .ini files /etc/php/7.0/apache2/conf.d
Additional .ini files parsed    (none)

更新 我从 /usr/lib/apache2/ 中完全删除了 php7.0 模块,所以现在一切都是 php7.2。我的 phpinfo() 文件显示正确的路径:

Configuration File (php.ini) Path   /etc/php/7.2/apache2
Loaded Configuration File   /etc/php/7.2/apache2/php.ini
Scan this dir for additional .ini files /etc/php/7.2/apache2/conf.d

但是,仍然收到 Class'PDO' not found 错误。

我还能检查什么?为什么他们不加载?

【问题讨论】:

  • PDO 存在于全局命名空间中,使用 new \PDOuse PDO;
  • @DarkBee 如果涉及命名空间,错误消息会有所不同
  • 他们在那个问题中运行 PHP 5.3。这对我有影响吗?
  • 您的基于 Web 的 PHP 和 CLI PHP 可能使用不同的配置文件。尝试使用&lt;?php phpinfo(); 添加一个info.php 文件并将其加载到浏览器中。它不仅会告诉你哪些扩展可用,它还会告诉你它正在加载哪些配置文件

标签: php apache pdo


【解决方案1】:

我清除了 PHP,然后重新开始。我做了与以前完全相同的事情并遵循了错误。我一直遇到同样的致命错误,直到我这样做了:

apt install php7.2-mysql

我的问题已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2016-11-12
    • 1970-01-01
    • 2017-12-06
    • 2011-06-03
    相关资源
    最近更新 更多