2013-04-26 3 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 отсутствует 'в конце? – Svetoslav

ответ

9

Создать db.local.php в папку ./config/autoload и добавить следующее содержание

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

+0

Как это будет изменено, чтобы содержать 2 отдельных соединения, будет ли он копировать массив 'db' и' db' в 'aliases' и просто переименовывать их, например. 'Db2'? –

+0

Я не пробовал, но я думаю, что это может быть сделано путем копирования и переименования псевдонимов. – user773440

0

Вот как выглядит мой local.php в config \ autoload \ 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

Типично там, я думаю, должно быть «dsn» не «dbn» – Kzqai

+0

@Kzqai: Да, вы правы. Исправленный. благодаря –

Смежные вопросы