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());
}
Ideen, warum ich diesen Fehler bekomme?
PHP 5.3.15 CloudLinux/CentOS 6 CPanel
versuchen
yum install php-pdo
yum install php-pdo_mysql
service httpd restart
Fügen Sie use PDO;
nach Ihrem Namespace oder direkt vor Ihrer Klasse oder am Anfang Ihrer PHP
-Datei ein.
Dies kann auch passieren, wenn sich im aktuellen Arbeitsverzeichnis der Web-App eine php.ini
-Datei befindet. Wenn eine zur Änderung bestimmter Einstellungen dorthin gestellt wurde, wird die globale Einstellung überschrieben.
Um dieses Problem zu vermeiden, verwenden Sie keine php.ini
-Datei zum Ändern der Einstellungen. stattdessen können Sie:
.htaccess
-Datei mit php_flag
( siehe hier ).user.ini
-Datei ( siehe hier )Stellen Sie sicher, dass sie in der Datei php.ini aufgerufen werden
Wenn das PDO in der Liste der aktuell installierten PHP-Module angezeigt wird, sollten Sie die Datei php.ini im entsprechenden Ordner überprüfen, um sicherzustellen, dass sie aufgerufen werden. Irgendwo in der php.ini-Datei sollten Sie Folgendes sehen:
extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so
Wenn sie nicht vorhanden sind, fügen Sie die Zeilen oben am Ende der Datei php.ini hinzu und speichern Sie sie.
Was ist die vollständige Quelle der Datei Mysql.php
. Basierend auf der Ausgabe der PHP-Infoliste klingt es so, als würden Sie versuchen, eine globale Klasse aus einem Namespace heraus zu referenzieren.
Wenn die Datei Mysql.php
eine Anweisung "Namespace" enthält, verwenden Sie \PDO
anstelle von PDO
. Dies weist PHP an, nach einer globalen Klasse zu suchen, anstatt im lokalen Namespace zu suchen.
Ich hatte das gleiche Problem bei GoDaddy. Ich habe extension=pdo.so
zu php.ini
hinzugefügt, aber es hat immer noch nicht funktioniert. Und dann fiel mir nur eines ein: Permissions
Beenden Sie vor dem Hochladen der Datei alle PHP - Prozesse (cPanel> PHP Processes).
Das Problem war, dass es mit den file-Berechtigungen auf 0644
gesetzt war und nicht ausführbar war. Sie müssen die Dateiberechtigung mindestens auf 0755
einstellen.
Ich habe es mit library PHP_PDO gelöst, da mein Hosting-Provider meine Anforderung für die Installation des PDO-Treibers auf dem Apache-Server nicht akzeptierte.
sie können die geladene Konfigurationsdatei einfach herausfinden, indem Sie den folgenden Befehl ausführen:
php -i | grep 'php.ini'
Fügen Sie dann die folgenden Zeilen hinzu, um die php.ini-Datei zu korrigieren
extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so
Starten Sie dann den Webserver neu.
service httpd restart
Dieser Fehler wird dadurch verursacht, dass PDO
für PHP nicht verfügbar ist.
Wenn Sie den Fehler in der Befehlszeile erhalten oder nicht über dieselbe Schnittstelle, die Ihre Website für PHP verwendet, rufen Sie möglicherweise eine andere Version von PHP auf oder verwenden eine andere php.ini
-Konfigurationsdatei, wenn Sie phpinfo()
überprüfen.
Stellen Sie sicher, dass das PDO geladen ist und die PDO-Treiber für Ihre Datenbank ebenfalls geladen sind.
Wenn Sie php mit dem php-fpm-Modul ausführen, vergessen Sie nicht, den Befehl systemctl zu starten, um php-fpm neu zu starten. Dadurch wird das php-fpm-Modul neu geladen.