PHP致命错误:未find类“PDO”

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文件来改变设置; 相反,您可以:

  • 在虚拟主机声明中指定设置
  • 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查找全局类,而不是查看本地名称空间。

我用库PHP_PDO解决了这个问题,因为我的托pipe服务提供者不接受我要求安装PDO驱动到Apache服务器。

我在GoDaddy上遇到同样的问题。 我添加了extension=pdo.sophp.ini ,仍然没有工作。 然后只有一件事出现在我的脑海里: 权限

在上传文件之前,终止所有PHP进程(cPanel-> PHP进程)。

问题是,与文件权限 ,它被设置为0644 ,不可执行。 您至less需要设置文件权限0755

权限

这个错误是由PDO不可用于PHP引起的。

如果您在命令行上获取错误,或者没有通过您的网站用于PHP的相同界面,则可能会调用不同版本的PHP,或者在检查phpinfo()时使用不同的php.iniconfiguration文件。

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