Неустранимая ошибка PHP: класс 'PDO' не найден

42
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

  • 2
    Каковы результаты debug(PDO::getAvailableDrivers());
  • 1
    Похоже, вопрос поддержки уровня обслуживания?
Показать ещё 6 комментариев
Теги:
cakephp
web-applications

9 ответов

54

попробовать

 yum install php-pdo
 yum install php-pdo_mysql

 service httpd restart
  • 1
    Это действительно отличный и правильный ответ. Спасибо приятель.
  • 0
    где это запустить?
Показать ещё 3 комментария
43

Попробуйте добавить use PDO; после своего пространства имен или непосредственно перед вашим классом или в верхней части вашего файла PHP.

  • 4
    Это сделало это для меня ... Я был внутри класса с пространством имен и просто добавил `\` перед PDO как предлагалось в другом месте, не сработало - но это сработало :)
  • 1
    Почесывая голову файлами php.ini, когда я увидел это ...
Показать ещё 1 комментарий
21

Это также может произойти, если в текущем рабочем каталоге веб-приложения есть файл php.ini. Если кто-то был помещен туда для изменения определенных настроек, он переопределит глобальный.

Чтобы избежать этой проблемы, не используйте файл php.ini для изменения настроек; вместо этого вы можете:

  • Укажите настройки в объявлении vhost
  • Используйте .htaccess файл с php_flag (см. здесь)
  • Используйте файл .user.ini (см. здесь)
  • 0
    Привет, Аластер, я немного расширил твой ответ. Надеюсь, что все в порядке. ;-)
11

Убедитесь, что они вызываются в файле php.ini

Если PDO отображается в списке установленных php-модулей, вам необходимо проверить файл php.ini в соответствующей папке, чтобы убедиться, что они вызываются. Где-то в файле php.ini вы должны увидеть следующее:

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

Если они отсутствуют, просто добавьте строки выше в конец файла php.ini и сохраните их.

9

Каков полный источник файла Mysql.php. Основываясь на выходе списка информации о php, похоже, что вы можете ссылаться на глобальный класс из пространства имен.

Если в файле Mysql.php имеется оператор "namespace", используйте \PDO вместо PDO - это скажет PHP, что он ищет глобальный класс, а не ищет в локальном пространстве имен.

  • 0
    pastebin.com/QU2CttLG
  • 0
    ну нет там пространства имен, я опять в тупике.
Показать ещё 1 комментарий
1

У меня была та же проблема на GoDaddy. Я добавил extension=pdo.so в php.ini, все еще не работал. И тогда мне пришло в голову только одно: Разрешения

Перед загрузкой файла убейте все процессы PHP (cPanel- > PHP Processes).

Проблема заключалась в том, что при разрешении файла он был установлен в 0644 и не был выполнен. Вам нужно установить разрешение файла как минимум 0755.

Изображение 106950

1

Я решил его с помощью библиотеки PHP_PDO, потому что мой хостинг-провайдер не принял мое требование для установки драйвера PDO на сервер Apache.

  • 0
    Привет, подскажите, как добавить библиотеку в cpanel, потому что я на общем хостинге и застрял в этом.
  • 0
    Спасибо, брат, ты потрясающий. Рабочий PDO ... :)
Показать ещё 2 комментария
0

Если вы запускаете php с модулем php-fpm, не забудьте запустить команду systemctl restart php-fpm! Это перезагрузит модуль php-fpm.

  • 0
    Это похоже на комментарий и вообще не дает ответа на ответ.
0

Эта ошибка вызвана тем, что PDO недоступен для PHP.

Если вы получаете ошибку в командной строке или нет через тот же интерфейс, который использует ваш сайт для PHP, вы потенциально вызываете другую версию PHP или добавляете другой конфигурационный файл php.ini при проверке phpinfo().

Убедитесь, что PDO загружен, а также загружены драйверы PDO для вашей базы данных.

  • 0
    Он загружается, как указано в комментариях выше.
  • 2
    +10 Это нелепо - голосовать ... это именно то, что происходит со мной ... после обновления PHP до 7.1 PDO нет в наличии ... некоторые downvoters действительно странные. это хобби в стеке?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню