2013-04-26 18 views
5

Cercando di comprendere i nuovi concetti di Zend Framework 2.0.Zend Framework 2 - Connessione al database

Sto provando a connettermi a un database ea ottenere quella connessione in un controller o modello. Niente di eccezionale, solo la pura connessione per eseguire query contro.

Quindi questo è il mio codice corrente:

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

Che cosa sto facendo di sbagliato?

+0

mysql: dbname = DBNAME; host = HOSTNAME mancante 'alla fine? – Svetoslav

risposta

9

Crea db.local.php nella cartella ./config/autoload e aggiungere il seguente contenuto

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

nel controller $this->getServiceLocator()->get('db'); per accedere al database.

+0

Grazie mille, funziona! Potresti anche dirmi come accedere a questa connessione a un modello/a qualsiasi altra classe? – grubolsch

+0

Come sarebbe stato modificato per contenere 2 connessioni separate, sarebbe copia la 'db' array e la voce' db' in 'aliases 'e basta rinominarli ad es. 'Db2'? –

+0

Non l'ho provato, ma penso che si possa fare copiando e rinominando gli alias – user773440

0

Ecco come appare il mio local.php in 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', 
), 
),); 

Ora utilizzare questo per creare un adattatore di database:

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

Creare uno statetment sql e mettere in $ sql variabile. Ora fare questo:

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

Spero che questo aiuti.

+0

Il typo lì, penso, dovrebbe essere 'dsn' non 'dbn' – Kzqai

+0

@Kzqai: Sì, hai ragione. Corretto. Grazie –