首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO异常ZEND框架2

PDO异常ZEND框架2
EN

Stack Overflow用户
提问于 2014-03-18 19:16:41
回答 3查看 3.4K关注 0票数 2

在我的基于ZF2 CE的ZendServer项目中,在global.php文件中有以下内容:

代码语言:javascript
复制
return array(
  'db'=> array(
      'driver' => 'Pdo',
      'dns' => 'mysql:dbname=test; host=localhost',
      'username' => '***',
      'password' => '***',
      'driver_options' => array(
          PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
      ),
  ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' =>
                'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

但是,当我尝试使用db连接时,会出现以下错误:

代码语言:javascript
复制
Zend\Db\Adapter\Exception\RuntimeException

文件:

代码语言:javascript
复制
/var/www/ProvaProgetto/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:289

消息:

代码语言:javascript
复制
Connect Error: could not find driver

我试着检查php -m | grep -i pdo是否启用了pdo扩展,它是否返回

代码语言:javascript
复制
PHP Warning:  PHP Startup: Unable to load dynamic library 

'/usr/lib/php5/20090626/mysql.so' - /usr/lib/php5/20090626/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mysqli.so' - /usr/lib/php5/20090626/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/pdo_mysql.so' - /usr/lib/php5/20090626/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0 PDO

我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-19 11:46:20

问题与您的环境/配置有关,而不是Zend。您必须首先正确安装和配置mysqli/pdo扩展插件才能使用它们。

实际上,您的php -m | grep -i pdo命令显式地说明了问题;无法加载该扩展。

检查您的php.ini,重新安装这些扩展(如果需要)和/或确保您在php.ini中启用了它们,重新启动您的web服务器。

如果我没有错,Zend应该提供一个GUI界面来配置/启用/禁用扩展。(我从未使用过ZS,但问题很清楚)

票数 0
EN

Stack Overflow用户

发布于 2015-01-19 14:29:01

‘=> 'mysql:dbname=test;host=localhost’

您的问题是'dns',应该是:'dsn‘。

票数 2
EN

Stack Overflow用户

发布于 2014-03-18 19:51:20

尝试重新安排您的db凭证。将它们放入local.php而不是global.php中(除非每个环境的凭据相同),然后数组应该如下所示

local.php

代码语言:javascript
复制
'db'                =>  array
                                (
                                    'adapters'  =>  array
                                                    (
                                                        'test-db'       =>  array
                                                                            (
                                                                                'driver'    =>  'pdo',
                                                                                'dsn'       =>  'mysql:dbname=test; host=localhost',
                                                                                'username'  =>  '**********',
                                                                                'password'  =>  '**********',
                                        'driver_options'    =>  array
                                                    (
                                                            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                                                                                            ),
                                                    )
                                ),

在您的Module.php添加

代码语言:javascript
复制
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

public function getServiceConfig()
{
return  array
            (
                'factories'     =>  array
                                    (
                                        'Application\Mapper\TestTable'   =>  function($sm)
                                                                                {
                                                                                    $tableGateway   =   $sm->get('TestTableGateway');
                                                                                    $table          =   new TestTable($tableGateway);
                                                                                    return $table;
                                                                                },
                                        'TestTableGateway'               =>  function($sm)
                                                                                {
                                                                                    $dbAdapter          =   $sm->get('test-db');
                                                                                    $resultSetPrototype =   new ResultSet();
                                                                                    $resultSetPrototype->setArrayObjectPrototype(new Test());
                                                                                    return new TableGateway('actualTableName', $dbAdapter, null, $resultSetPrototype);
                                                                                },
                                    ),
            );

返回到全局,将service_manager数组更改为:

代码语言:javascript
复制
        'service_manager'   =>  array
                                (
                                    'abstract_factories'    =>  array
                                                                (
                                                                    'Zend\Db\Adapter\AdapterAbstractServiceFactory',
                                                                ),
                                    'factories'             =>  array
                                                                (

                                                                ),
                                ),
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22488933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档