59
PHP Fatal error:  Class 'PDO' not found in /home/bd/public_html/app/webroot/Cake/Model/Datasource/Database/Mysql.php on line 177

PHP INFO:

PDO

PDO support => enabled
PDO drivers => sqlite, sqlite2, mysql

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => 5.5.24

Directive => Local Value => Master Value
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock

pdo_sqlite

PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.7.7.1

PHP INI:

extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so
extension=pdo_mysql.so

CODE:

/**
 * Check whether the MySQL extension is installed/loaded
 *
 * @return boolean
 */
        public function enabled() {
                return in_array('mysql', PDO::getAvailableDrivers());
        }

Ideas as to why I'm getting this error?

PHP 5.3.15 CloudLinux/CentOS 6 CPanel

4

15 回答 15

71

尝试

 yum install php-pdo
 yum install php-pdo_mysql

 service httpd restart
于 2013-05-10T04:04:29.287 回答
66

尝试use PDO;在命名空间之后、类之前或文件顶部添加PHP

于 2014-07-05T15:54:34.583 回答
22

php.ini如果Web 应用程序的当前工作目录中有文件,也会发生这种情况。如果一个已被放置在那里以更改某些设置,它将覆盖全局设置。

为避免此问题,请勿使用php.ini文件更改设置;相反,您可以:

  • 在 vhost 声明中指定设置
  • 使用.htaccess文件php_flag见这里
  • 使用.user.ini文件(见这里
于 2013-03-07T06:39:31.087 回答
15

确保它们在 php.ini 文件中被调用

如果 PDO 显示在当前安装的 php 模块列表中,您将需要检查相关文件夹中的 php.ini 文件以确保它们被调用。在 php.ini 文件的某处,您应该看到以下内容:

extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so

如果它们不存在,只需将上面的行添加到 php.ini 文件的底部并保存。

于 2015-01-02T19:16:04.617 回答
10

文件的完整来源是什么Mysql.php。根据 php info 列表的输出,听起来您可能正在尝试从命名空间中引用全局类。

如果文件Mysql.php中包含“命名空间”语句,请使用- 这\PDOPDO告诉 PHP 查找全局类,而不是查找本地命名空间。

于 2012-08-06T05:35:24.007 回答
3

有点晚了,但我发现了同样的问题,我在 PDO 前面用“\”修复了它

public function enabled() {
    return in_array('mysql', \PDO::getAvailableDrivers());
}
于 2020-03-19T19:46:19.717 回答
3

我在GoDaddy上遇到了同样的问题。我加了extension=pdo.soto php.ini,还是不行。然后我只想到一件事:权限

在上传文件之前,杀死所有 PHP 进程(cPanel->PHP 进程)。

问题是文件权限被设置为0644并且不可执行。您至少需要设置文件权限0755

权限

于 2016-06-25T11:37:30.417 回答
2

您可以通过执行以下命令来查找加载的配置文件,

 php -i | grep 'php.ini'

然后添加以下行以更正 php.ini 文件

extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so

然后重启网络服务器,

service httpd restart
于 2019-04-23T17:23:07.160 回答
1

此错误是由于PDOPHP 不可用引起的。

如果您在命令行上收到错误,或者不是通过您的网站用于 PHP 的相同界面,您可能会调用不同版本的 PHP,或者php.ini在检查phpinfo().

确保已加载 PDO,并且还加载了数据库的 PDO 驱动程序。

于 2012-08-06T05:29:07.133 回答
0

我使用库PHP_PDO解决了它,因为我的托管服务提供商不接受我将 PDO 驱动程序安装到 apache 服务器的要求。

于 2015-11-04T13:58:47.933 回答
-1

如果有人在 cPanel 中遇到此错误,请检查 cPanel 中的 PHP 版本类型。将其更改alt-phpea-php. 这个设置对我有用。

于 2021-09-07T06:20:09.270 回答
-1

如果您使用 php-fpm 模块运行 php,请不要忘记运行命令 systemctl restart php-fpm!这将重新加载 php-fpm 模块。

于 2019-01-25T06:43:09.397 回答
-1

我必须在 AWS EC2 Linux 实例(PHP 版本 7.3)上运行以下命令:

sudo yum install php73-php-pdo php73-php-mysqlnd
于 2020-12-06T15:20:29.843 回答
-1

折腾了好久,终于解决了。检查您在 Cpanel 中的文件夹以查看是否有 php.ini 文件。如果是,请删除它,因为 Cpanel 将使用它自己的 php.ini

于 2021-09-09T03:41:30.420 回答
-1

对于 Fedora 33,您可以按如下方式安装:

安装

dnf install php-pdo
dnf install php-pdo_mysql

重启 PHP

systemctl restart php-fpm.service
于 2021-11-26T19:46:02.163 回答