zend框架2和sqlserver驱动程序问题

时间:2013-10-25 17:41:12

标签: php sql-server database pdo zend-framework2

当我尝试从我的zf2应用程序连接到我的sql server数据库时,如下所示,

return array(
    'db' => array(
        'driver' => 'Pdo',
        'dsn'            => 'sqlsrv:dbname=album;hostname=192.168.0.20',
        'username'       => 'user',
        'password'       => 'pass',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

我收到此错误,

File:
/usr/local/zend/apache2/htdocs/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Connection.php:289
Message:
Connect Error: could not find driver

我在这里遗漏了什么吗?或者说这在面向Linux的机器上根本不起作用?

4 个答案:

答案 0 :(得分:0)

我总是这样准备就绪,使用dist文件在你完成部署时设置正确的连接参数:

本地配置文件

'database' => array(
    'connection' => array(
        'mysql_master' => array( 
            'driver' => 'Pdo_Mysql',
            'host' => 'host',
            'dbname' => 'analytics',
            'username' => 'user',
            'password' => 'pass', 
            'charset' => 'UTF8',
            'driver_options' => array(
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
            ),              
        ),
    ),
),

然后在我的Module.php中,我定义了这样一个工厂(在getServiceConfig数组中):

'Zend\Db\Adapter\Adapter' => function ($sm){

     $config         = $sm->get('config');
     $dbParams       = $config['database']['config']['mysql_master'];

     $adapter = new \Zend\Db\Adapter\Adapter($dbParams);
     return $adapter;
},

希望这会有所帮助。如果这不起作用,还会有其他事情发生..让我知道,我可以提供帮助。

干杯。 亚历

答案 1 :(得分:0)

问题是您没有安装必要的驱动程序。我和postgres有同样的问题,这解决了我:

apt-get install php5-pgsql

但是,我不是100%确定必须安装什么驱动程序才能使Sql Server正常工作。我确实读到它不再受支持了。见:PHP PDO to MS SQL Server on Ubuntu Server。简而言之,您最好的选择是使用:

sudo apt-get install php5-sybase

然后连接字符串:

"dblib:host=sever;dbname=dbname"

从我收集到的内容,应该将您连接到Sql Server数据库,但是我再也无法保证这一点,因为我没有设置来测试它。希望有所帮助...

答案 2 :(得分:0)

尝试取出这一行:"// PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''"。 您的连接表明您正在尝试连接到MSSQL而不是MySQL

return array(
    'db' => array(
        'driver' => 'Pdo',
        'dsn'            => 'sqlsrv:dbname=album;hostname=192.168.0.20',
        'username'       => 'user',
        'password'       => 'pass',
        'driver_options' => array(
           // PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

答案 3 :(得分:0)

我希望这对你有所帮助......我目前正在关注Zend Framework 2骨架应用指南。我的数据库参数需要通过以下方式传递:

    'db' => array(
         'driver'   => 'SQLSRV',
         'hostname' => 'SqlServerName',
         'Database' => 'SqlDatabaseName',
         'uid'      => 'UsertoConnectwith',
         'pwd'      => 'Passwordofusertoconnectwith'
     ),