PHP致命错误:找不到类'PDO'

Ama*_*ith 47 php mysql cakephp web-applications

PHP Fatal error:  Class 'PDO' not found in /home/bd/public_html/app/webroot/Cake/Model/Datasource/Database/Mysql.php on line 177
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

PHP INI:

extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so
extension=pdo_mysql.so
Run Code Online (Sandbox Code Playgroud)

码:

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

关于为什么我收到这个错误的想法?

PHP 5.3.15 CloudLinux/CentOS 6 CPanel

Bảo*_*Nam 61

尝试

 yum install php-pdo
 yum install php-pdo_mysql

 service httpd restart
Run Code Online (Sandbox Code Playgroud)

  • @ s4suryapal:在服务器linux的控制台命令行中运行它.在窗口中,你可以在php.ini(ex:xampp,wamp,...)中使用:extension = php_pdo_mysql.dll取消推荐行并重新启动apache (3认同)

Jo *_*Smo 49

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

  • 这样做对我来说......我在一个命名空间类中,只是在其他地方建议的"PDO"前面添加一个`\`也行不通 - 但这确实:) (5认同)

Ala*_*ine 21

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

要避免此问题,请不要使用php.ini文件来更改设置; 相反,你可以:

  • 在vhost声明中指定设置
  • 使用.htaccess文件php_flag(见这里)
  • 使用.user.ini文件(见这里)


Bru*_*iro 12

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

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

extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*hen 9

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

如果文件Mysql.php中有一个说法"命名空间",使用\PDO代替PDO-这将告诉PHP来寻找一个全球性的阶级,而不是找当地的命名空间.


Pre*_*ant 1

此错误是由于PDOPHP 不可用而导致的。

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

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

  • +10 投票否决真是太荒谬了...这正是我所发生的事情..在将 PHP 升级到 7.1 PDO 后不可用...一些否决者真的很奇怪。这是堆栈中的一种爱好吗? (2认同)