【问题标题】:The PDO extension is required for this adapter but the extension is not loaded此适配器需要 PDO 扩展,但未加载扩展
【发布时间】:2010-03-05 12:17:49
【问题描述】:

当我尝试使用 Zend_Db_Table_Abstract 类的 fetchall 方法时出现以下异常...

An error occurred4545
EXCEPTION_OTHER
Exception information:
Message: The PDO extension is required for this adapter but the extension is not loaded 

Stack trace:
#0 D:\www\TestProject\library\Zend\Db\Adapter\Pdo\Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect()
#1 D:\www\TestProject\library\Zend\Db\Adapter\Abstract.php(448): Zend_Db_Adapter_Pdo_Mysql->_connect()
#2 D:\www\TestProject\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('DESCRIBE `album...', Array)
#3 D:\www\TestProject\library\Zend\Db\Adapter\Pdo\Mysql.php(156): Zend_Db_Adapter_Pdo_Abstract->query('DESCRIBE `album...')
#4 D:\www\TestProject\library\Zend\Db\Table\Abstract.php(823): Zend_Db_Adapter_Pdo_Mysql->describeTable('albums', NULL)
#5 D:\www\TestProject\library\Zend\Db\Table\Abstract.php(862): Zend_Db_Table_Abstract->_setupMetadata()
#6 D:\www\TestProject\library\Zend\Db\Table\Abstract.php(969): Zend_Db_Table_Abstract->_setupPrimaryKey()
#7 D:\www\TestProject\library\Zend\Db\Table\Select.php(100): Zend_Db_Table_Abstract->info()
#8 D:\www\TestProject\library\Zend\Db\Table\Select.php(78): Zend_Db_Table_Select->setTable(Object(Application_Model_Albums))
#9 D:\www\TestProject\library\Zend\Db\Table\Abstract.php(1005): Zend_Db_Table_Select->__construct(Object(Application_Model_Albums))
#10 D:\www\TestProject\library\Zend\Db\Table\Abstract.php(1303): Zend_Db_Table_Abstract->select()
#11 D:\www\TestProject\application\controllers\IndexController.php(17): Zend_Db_Table_Abstract->fetchAll()
#12 D:\www\TestProject\library\Zend\Controller\Action.php(513): IndexController->indexAction()
#13 D:\www\TestProject\library\Zend\Controller\Dispatcher\Standard.php(289): Zend_Controller_Action->dispatch('indexAction')
#14 D:\www\TestProject\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#15 D:\www\TestProject\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#16 D:\www\TestProject\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#17 D:\www\TestProject\public\index.php(26): Zend_Application->run()
#18 {main}  
Request Parameters:
array (
  'controller' => 'index',
  'action' => 'index',
  'module' => 'default',
)  

我在 php.ini 文件中添加了以下几行

extension=pdo.so
extension=pdo_mysql.so

extension=php_pdo.dll 
extension=php_pdo_mssql.dll 

我的系统中还安装了 PDO MySQL 包。但是我仍然遇到上述异常....(还重新启动了 Apache 服务器)

【问题讨论】:

  • 您是否 100% 确定您使用的是正确的 php.ini 文件?请致电phpinfo() 确认。
  • 是的,我在 php.ini 文件中所做的其他更改正在反映

标签: php zend-framework apache2.2


【解决方案1】:

首先,你不能同时拥有:

extension=pdo.so
extension=pdo_mysql.so

哪些适用于 Linux,并且:

extension=php_pdo.dll 
extension=php_pdo_mssql.dll 

哪些适用于 windows :您必须根据您使用的系统进行选择。

由于您在 Windows 上,您应该使用 .dll 版本。


但请注意,您使用的是:

extension=php_pdo_mssql.dll 

您加载了pdo_mssql 扩展程序——它适用于 Microsoft SQL Server,而不是 MySQL。

相反,您应该为 MySQL 加载扩展:

extension=php_pdo_mysql.dll 

更正后,重新启动 Apache ;事情应该会变得更好。


如果情况没有好转,您应该检查phpinfo() 的输出:

  • phpinfo()输出的开头,表示加载了哪个php.ini文件;确保您修改了正确的。
  • 检查,文件下方,是否有关于pdo_mysql的部分
    • 如果没有,请检查 Apache 的 error_log,以防万一;-)

【讨论】:

  • 嗨,@Pascal MARTIN 我已经更正了上述问题,现在我收到了当前未安装 mysql 驱动程序的错误。但是我可以直接从 PHP 连接到 MySQL。我们需要什么特殊的 zend 驱动程序吗?
  • @Pascal MARTIN:我有这个问题,我使用shared host,所以我无法更改php.ini,有什么解决方案吗?
  • 如果您不是服务器的管理员,您无能为力;特别是,你不能安装 php 扩展
【解决方案2】:

从 PDO 支持的 Mabe 切换到 Mysqli 有帮助,它们在 ZF 中是可切换的(我这样做了)。

【讨论】:

    【解决方案3】:

    今天,我将一个网站从我们的测试服务器移动到客户端服务器,并收到此类错误,即此适配器需要 PDO 扩展,但未加载扩展。我在想必须有 pdo.so php 扩展,它没有安装在服务器上。发现问题后,我一直在寻找 php.ini 文件来检查扩展名,但由于共享主机,他们没有向我提供 ini 文件。

    在这篇文章中,我试图描述如何解决这类问题,这很容易,您可以使用以下给出的步骤来解决问题:

    如果您想了解有关 PDO 的更多信息,请查看 http://php.net/manual/en/ref.pdo-mysql.php

    如果您有权访问 php.ini 文件,请检查

    ;extension=pdo_mysql.so
    

    只需取消注释该行即可激活,使其看起来像

    extension=pdo_mysql.so
    

    保存文件并重新启动服务器。

    如果您无权访问 php.ini 文件,请按照以下步骤操作

    第 1 步。请检查您的 Magento 安装目录,其中必须有一个名为 php.ini.sample 的文件。

    第 2 步。现在将文件从 php.ini.sample 重命名为 php.ini

    步骤 3. 将以下代码放入其中

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

    第 4 步。现在刷新浏览器缓存,问题已解决。

    【讨论】:

      【解决方案4】:

      如果您在 godaddy 托管帐户上,并且由于服务器主要配置文件的限制而无法执行任何操作,并且您无法重新启动 apache。您可以通过从“选择 PHP 版本”更改 php 版本来绕过此问题,这样您将重新启动设置。在我的情况下,我尝试编辑 php.ini 而不是 php5.ini 还添加了 .user.ini 文件,结果我收到了这个错误: 此适配器需要 PDO 扩展,但未加载扩展 现在我的问题解决了,如果你不是系统管理员,这个解决方案不仅可以在其他主机上运行,​​而且可以在 Godaddy 上运行!!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        相关资源
        最近更新 更多