2013-04-26 69 views
5

试图围绕Zend Framework 2.0的新概念进行探讨。Zend Framework 2 - 数据库连接

我想连接到一个数据库,并获得控制器或模型中的连接。 没有什么奇特的,只是纯粹的连接来运行查询。

所以这是我当前的代码:

//module.config.php 
return array(
    'db' => array(
     'driver'   => 'Pdo', 
     'dsn'   => 'mysql:dbname=DBNAME;host=HOSTNAME, 
     'driver_options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
     ), 
     'username' => 'USERNAME', 
     'password' => 'PASSWORD', 
    ), 
    'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
      'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', 
     ), 
    ), 
); 

我在做什么错?

+0

mysql:dbname = DBNAME; host = HOSTNAME is missing'end? – Svetoslav 2013-04-26 11:23:16

回答

9

在./config/autoload文件夹中创建db.local.php,并添加以下内容

return array(
'db' => array(
    'driver'   => 'Pdo', 
    'dsn'   => 'mysql:dbname=zenBlog;host=localhost', 
    'username'  =>'root', 
    'password'  =>'', 
    'driver_options' => array(
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
    ), 
), 
'service_manager' => array(
    'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter', 
), 
),); 

在你的控制器$this->getServiceLocator()->get('db');对数据库的访问。

+0

非常感谢,它的工作! 你能告诉我如何访问模型/任何其他类的连接吗? – grubolsch 2013-04-26 13:23:27

+0

如何修改它以包含2个单独的连接,它是否将'db'数组和'db'条目复制到'aliases'中,并将它们重命名为例如'db2'? – 2014-03-25 10:06:51

+0

我还没有尝试过,但我认为可以通过复制和重命名别名来完成 – user773440 2014-03-25 10:50:27

0

这就是我在config \ autoload \ local.php中的local.php的样子。

<?php 
return array(
'db' => array(
    'driver'   => 'Pdo', 
    'dsn' => 'mysql:dbname=<dbname>;host=localhost', 
    'username' => 'root', 
    'password' => <your password here>, 
    'driver_options' => array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
), 
), 
'service_manager' => array(
'aliases' => array(
'adapter' => 'Zend\Db\Adapter\Adapter', 
), 
),); 

现在用它来创建数据库适配器:

$adapter = $this->getServiceLocator()->get('adapter'); 

创建SQL statetment,把变量$ SQL。 现在这样做:

$statement = $adapter->createStatement($sql); 
$result = $statement->execute(); 

希望这会有所帮助。

+0

Typo在那里,我认为应该是'dsn'而不是'dbn' – Kzqai 2016-10-04 16:17:00

+0

@Kzqai:是的,你是对的。纠正。谢谢 – 2016-10-04 16:51:14