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());
}
Идеи относительно того, почему я получаю эту ошибку?
PHP 5.3.15 CloudLinux/CentOS 6 CPanel
попробовать
yum install php-pdo
yum install php-pdo_mysql
service httpd restart
Попробуйте добавить use PDO;
после своего пространства имен или непосредственно перед вашим классом или в верхней части вашего файла PHP
.
PDO
как предлагалось в другом месте, не сработало - но это сработало :)
Это также может произойти, если в текущем рабочем каталоге веб-приложения есть файл php.ini
. Если кто-то был помещен туда для изменения определенных настроек, он переопределит глобальный.
Чтобы избежать этой проблемы, не используйте файл php.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, похоже, что вы можете ссылаться на глобальный класс из пространства имен.
Если в файле Mysql.php
имеется оператор "namespace", используйте \PDO
вместо PDO
- это скажет PHP, что он ищет глобальный класс, а не ищет в локальном пространстве имен.
У меня была та же проблема на GoDaddy. Я добавил extension=pdo.so
в php.ini
, все еще не работал. И тогда мне пришло в голову только одно: Разрешения
Перед загрузкой файла убейте все процессы PHP (cPanel- > PHP Processes).
Проблема заключалась в том, что при разрешении файла он был установлен в 0644
и не был выполнен. Вам нужно установить разрешение файла как минимум 0755
.
Я решил его с помощью библиотеки PHP_PDO, потому что мой хостинг-провайдер не принял мое требование для установки драйвера PDO на сервер Apache.
Если вы запускаете php с модулем php-fpm, не забудьте запустить команду systemctl restart php-fpm! Это перезагрузит модуль php-fpm.
Эта ошибка вызвана тем, что PDO
недоступен для PHP.
Если вы получаете ошибку в командной строке или нет через тот же интерфейс, который использует ваш сайт для PHP, вы потенциально вызываете другую версию PHP или добавляете другой конфигурационный файл php.ini
при проверке phpinfo()
.
Убедитесь, что PDO загружен, а также загружены драйверы PDO для вашей базы данных.
debug(PDO::getAvailableDrivers());