此适配器需要PDO扩展,但未加载扩展

时间:2010-03-05 12:17:49

标签: php zend-framework apache2.2

当我尝试使用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服务器)

4 个答案:

答案 0 :(得分:8)

首先,你不能同时拥有两者:

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,以防万一; - )

答案 1 :(得分:0)

Mabe从PDO切换回Mysqli有帮助,他们可以在ZF切换(我这样做了)。

答案 2 :(得分:0)

今天我已经将一个网站从我们的测试服务器移动到客户端服务器,并且出现了这样的错误,即此适配器需要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.现在刷新浏览器缓存,问题已解决。

答案 3 :(得分:-1)

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