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.so
到php.ini
,仍然没有工作。 然后只有一件事出现在我的脑海里: 权限
在上传文件之前,终止所有PHP进程(cPanel-> PHP进程)。
问题是,与文件权限 ,它被设置为0644
,不可执行。 您至less需要设置文件权限0755
。
这个错误是由PDO
不可用于PHP引起的。
如果您在命令行上获取错误,或者没有通过您的网站用于PHP的相同界面,则可能会调用不同版本的PHP,或者在检查phpinfo()
时使用不同的php.ini
configuration文件。
确保PDO已加载,并且数据库的PDO驱动程序也已加载。