2013-04-26 20 views
5

Próbuję objąć głowami nowe koncepcje Zend Framework 2.0.Zend Framework 2 - połączenie z bazą danych

Próbuję połączyć się z bazą danych i uzyskać to połączenie w kontrolerze lub modelu. Nic nadzwyczajnego, tylko czyste połączenie, z którym można kierować zapytania.

Więc to jest mój bieżący kod:

//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', 
     ), 
    ), 
); 

Co robię źle?

+0

mysql: dbname = DBNAME; host = HOSTNAME brakuje "na końcu? – Svetoslav

Odpowiedz

9

Tworzenie db.local.php w folderze ./config/autoload i dodać następującą treść

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', 
), 
),); 

w kontrolerze $this->getServiceLocator()->get('db');, aby uzyskać dostęp do bazy danych.

+0

Wielkie dzięki, działa! Czy możesz mi również powiedzieć, jak uzyskać dostęp do tego połączenia z modelem/dowolną inną klasą? – grubolsch

+0

W jaki sposób zmodyfikowano by tak, aby zawierał 2 oddzielne połączenia, czy skopiowałby wpis 'db' array i' db' w 'aliases' i po prostu zmienił nazwy na np. 'db2'? –

+0

Nie próbowałem go, ale myślę, że można to zrobić, kopiując i zmieniając nazwy aliasów – user773440

0

Tak wygląda mój plik local.php w 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', 
), 
),); 

Teraz to wykorzystać, aby stworzyć adapter bazy danych:

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

Tworzenie statetment sql i umieścić w zmiennej $ sql. Teraz to zrobić:

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

nadzieję, że to pomaga.

+0

Typo tam, myślę, powinien być "dsn", a nie "dbn" – Kzqai

+0

@Kzqai: Tak, masz rację. Poprawione. Dzięki –