簡體   English   中英

PHP致命錯誤:找不到類'PDO'

[英]PHP Fatal error: Class 'PDO' not found

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

PHP 信息:

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

代碼:

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

關於我為什么會收到此錯誤的想法?

PHP 5.3.15 CloudLinux/CentOS 6 CPanel

嘗試

 yum install php-pdo
 yum install php-pdo_mysql

 service httpd restart

嘗試添加use PDO; 在您的命名空間之后或在您的類之前或在您的PHP文件的頂部。

如果 Web 應用程序的當前工作目錄中有php.ini文件,也會發生這種情況。 如果一個已被放置在那里以更改某些設置,它將覆蓋全局設置。

為避免此問題,請勿使用php.ini文件更改設置; 相反,您可以:

  • 在 vhost 聲明中指定設置
  • 使用帶有php_flag.htaccess文件(參見此處
  • 使用.user.ini文件(見這里

確保它們在 php.ini 文件中被調用

如果 PDO 顯示在當前安裝的 php 模塊列表中,您將需要檢查相關文件夾中的 php.ini 文件以確保它們被調用。 在 php.ini 文件的某處,您應該看到以下內容:

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

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

Mysql.php文件的完整來源是什么。 根據 php info 列表的輸出,聽起來您可能正在嘗試從命名空間中引用全局類。

如果文件Mysql.php中有一條語句“namespace”,請使用\PDO代替PDO - 這將告訴 PHP 查找全局類,而不是查找本地名稱空間。

我在GoDaddy上遇到了同樣的問題。 我將extension=pdo.so添加到php.ini ,仍然沒有工作。 然后我只想到一件事:權限

在上傳文件之前,殺死所有 PHP 進程(cPanel->PHP 進程)。

問題是文件權限被設置為0644並且不可執行。 您需要至少設置文件權限0755

權限

有點晚了,但我發現了同樣的問題,我在 PDO 前面用“\”修復了它

public function enabled() {
    return in_array('mysql', \PDO::getAvailableDrivers());
}

您可以通過執行以下命令來查找加載的配置文件,

 php -i | grep 'php.ini'

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

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

然后重啟網絡服務器,

service httpd restart

此錯誤是由PDO對 PHP 不可用引起的。

如果您在命令行上收到錯誤,或者不是通過您的網站用於 PHP 的相同界面,您可能會調用不同版本的 PHP,或者在檢查phpinfo()時使用不同的php.ini配置文件。

確保已加載 PDO,並且還加載了數據庫的 PDO 驅動程序。

我使用庫PHP_PDO解決了它,因為我的托管服務提供商不接受我將 PDO 驅動程序安裝到 apache 服務器的要求。

如果您升級了 PHP 版本,請確保 .htaccess 中的舊 PHP 版本配置已被刪除。 有關更多信息,請查看此https://www.hostgator.com/help/article/php-configuration-plugin

對於 Fedora 33,您可以按如下方式安裝:

安裝

dnf install php-pdo
dnf install php-pdo_mysql

重啟 PHP

systemctl restart php-fpm.service

如果您使用 php-fpm 模塊運行 php,請不要忘記運行命令 systemctl restart php-fpm!這將重新加載 php-fpm 模塊。

我必須在 AWS EC2 Linux 實例(PHP 版本 7.3)上運行以下命令:

sudo yum install php73-php-pdo php73-php-mysqlnd

如果有人在 cPanel 中遇到此錯誤,請檢查 cPanel 中的 PHP 版本類型。 將其更改為alt-phpea-php 這個設置對我有用。

折騰了好久,終於解決了。 檢查您在 Cpanel 中的文件夾以查看是否有 php.ini 文件。 如果是,請刪除它,因為 Cpanel 將使用它自己的 php.ini

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM