Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP致命错误:类';PDO';找不到_Php_Mysql_Cakephp_Web Applications - Fatal编程技术网

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

PHP致命错误:类';PDO';找不到,php,mysql,cakephp,web-applications,Php,Mysql,Cakephp,Web Applications,PHP信息: PHP Fatal error: Class 'PDO' not found in /home/bd/public_html/app/webroot/Cake/Model/Datasource/Database/Mysql.php on line 177 PHP INI: PDO PDO support => enabled PDO drivers => sqlite, sqlite2, mysql pdo_mysql PDO Driver for MySQL

PHP信息:

PHP Fatal error:  Class 'PDO' not found in /home/bd/public_html/app/webroot/Cake/Model/Datasource/Database/Mysql.php on line 177
PHP INI:

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 5.3.15 CloudLinux/CentOS 6
CPanel

此错误是由于PHP无法使用
PDO
造成的

如果您在命令行上收到错误,或者不是通过您的网站用于PHP的同一界面收到错误,那么在检查
phpinfo()
时,您可能会调用不同版本的PHP,或者使用不同的
PHP.ini
配置文件


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

文件的完整源代码是什么
Mysql.php
。根据php信息列表的输出,听起来您可能试图从名称空间中引用一个全局类


如果文件
Mysql.php
中有一个语句“namespace”,请使用
\PDO
代替
PDO
——这将告诉php查找全局类,而不是查找本地名称空间。

如果web应用程序的当前工作目录中有
php.ini
文件,也会发生这种情况。如果在此处放置一个以更改某些设置,它将覆盖全局设置

为了避免这个问题,不要使用
php.ini
文件来更改设置;相反,您可以:

  • 在vhost声明中指定设置
  • 使用带有
    php\u标志的
    .htaccess
    文件()
  • 使用
    .user.ini
    文件()
试试看

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

尝试添加
使用PDO
位于名称空间之后或类之前或
PHP
文件顶部。

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

 php -i | grep 'php.ini'
如果PDO显示在当前安装的php模块列表中,则需要检查相关文件夹中的php.ini文件,以确保调用它们。在php.ini文件的某个地方,您应该看到以下内容:

 yum install php-pdo
 yum install php-pdo_mysql

 service httpd restart

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

我用library解决了这个问题,因为我的主机提供商不接受我在apache服务器上安装PDO驱动程序的要求。

我在GoDaddy上遇到了同样的问题。我添加了
扩展名=pdo.so
php.ini
,但仍然不起作用。然后我只想到一件事:权限

在上传文件之前,杀死所有PHP进程(cPanel->PHP进程)

问题是,使用文件权限,它被设置为
0644
,并且不可执行。您至少需要设置文件权限
0755


如果使用php fpm模块运行php,请不要忘记运行命令systemctl restart php fpm!这将重新加载php fpm模块。

您只需执行以下命令即可找到已加载的配置文件

extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=sqlite.so
然后添加以下行以更正php.ini文件

 php -i | grep 'php.ini'
然后重新启动web服务器

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

虽然有点晚了,但我发现了同样的问题,并在PDO前用“\”将其修复

service httpd restart

如果已升级PHP版本,请确保已删除.htaccess中的旧PHP版本配置。 有关更多信息,请查看此
我必须在AWS EC2 Linux实例(PHP版本7.3)上运行以下命令:



调试(PDO::getAvailableDrivers())的输出是什么似乎是一个服务级别支持问题?“调试设置不允许访问此url”将其添加到自己的php文件并运行。您是如何获得php_信息输出的?如果您是从CLI执行此操作的,那么输出可能会有所不同,因为cPanel使用了一个单独的PHP二进制文件到CentOS one.phpinfo();cli都使用相同的binaryIt正如上面评论中提到的那样被加载。+10投票否决真是太荒谬了……我就是这么做的……将PHP升级到7.1 PDO后不可用……一些否决者真的很奇怪。这是一种业余爱好吗?我想很多人没有意识到这个网站是每个人的资源,不仅仅是OP。不是每个答案都对OP有特别的帮助,但这并不意味着它们对其他人没有任何帮助。例如,这一条就是我需要的线索。向上投票。干杯。这里没有名称空间,我又被难倒了。我只是想知道这是不是一个编码很差的脚本。我不得不将Cake框架实际移动到webroot目录中,才能走到这一步;/脚本为:@s4suryapal:在服务器linux的控制台命令行中运行它。在窗口上,您可以在php.ini(例如:xampp,wamp,…)中用:extension=php_pdo_mysql.dll取消修改行,然后重新启动Apache。这个问题意味着他已经安装了pdo(引自phpinfo),所以-1。我如何在cent os 5.8上安装oracle的php pdo?这对我来说是正确的。。。我在一个有名称空间的类中,在
PDO
前面简单地添加一个``并没有起作用,但这个:)问题并没有提到他在使用名称空间。如果有人对所有其他客户类使用名称空间,这应该是可以接受的答案。因为他遗漏了一些代码
使用PDO
否则需要在他们的Web服务器中安装正确的PDO版本库。这帮了我很多忙。非常感谢。如果有人想知道PDO是PHP中的一个全局类,那么这也很有效。嗨,你能指导我如何将库添加到cpanel中吗?因为我在共享主机上,并且困在这里面了。谢谢兄弟,你太棒了。正在工作的PDO…:)您好,您能指导我如何将库添加到cpanel吗?因为我使用共享主机!拉梅什·库马尔:只要把PHP_PDO加入到你的代码的开头,我稍微扩展了一下你的答案。希望没问题请举例说明如何在.htaccess中添加pdo?非常感谢。它看起来像一条注释,根本不提供答案。您可以对所描述的内容使用multi_query(),但不应该<代码>多重查询()
不允许参数化。使用带有循环执行和抓取的单个准备语句
public function enabled() {
    return in_array('mysql', \PDO::getAvailableDrivers());
}
sudo yum install php73-php-pdo php73-php-mysqlnd