Использование соединения с базой данных Zend_Db - PullRequest
3 голосов
/ 21 февраля 2011

Я пытаюсь научить себя Zend Framework. У меня есть большой опыт использования пользовательских фреймворков, но я никогда не использовал Zend. Это все равно что пытаться использовать нож и вилку с рукавицами.

У меня есть система и работает. Соединение с базой данных создается в файле applition.ini без ошибок.

Я пытаюсь использовать это соединение с базой данных для выполнения базового SQL. В application.ini есть строки:

db.adapter      = PDO_MYSQL
db.params.host  = localhost
db.params.username = cpanel_dbuser
db.params.password = 123456
db.params.dbname   = cpanel_dbname

Я пытаюсь подключиться к базе данных в моем /public/index.php

$config = new Zend_Config_Ini(APPLICATION_PATH . 
                              '/configs/application.ini', 'production');
$application->db = Zend_Db::factory($config->db);
Zend_Db_Table::setDefaultAdapter($db);

Я получаю ошибку:

Fatal error:  Uncaught exception 'Zend_Db_Exception' with message 'Adapter name must be specified in a string' in /home/path/library/Zend/Db.php:226
Stack trace:
#0 /home/path/public/index.php(32): Zend_Db::factory(Array)
#1 {main} thrown in /home/path/library/Zend/Db.php on line 226

И если я напечатаю_r объект конфигурации

Zend_Config Object
(
    [_allowModifications:protected] => 
    [_index:protected] => 0
    [_count:protected] => 2
    [_data:protected] => Array
        (
            [adapter] => PDO_MYSQL
 /* ... more stuff ... */

Исходя из моего понимания учебников и PDF-файлов, из которых я работаю, если я установлю это соединение, я смогу совершить такие фантастические изумления, как следующие, изнутри indexAction контроллера. Действие

 $data = $this->db->fetchAll(‘SELECT * FROM table’);
 foreach ($data as $row) {
      echo $row[‘table_fieldname’];
 }

А затем начните писать модели для моих таблиц.

На данный момент, есть довольно серьезное искушение уйти в тупик и сделать это так, как я уже знаю, но это полностью противоречит цели обучения работе в рамках.

Может ли кто-нибудь устранить этот пробел для меня (или указать мне ресурс, который может это исправить)?

Ответы [ 3 ]

10 голосов
/ 21 февраля 2011

В файле application.ini внутри директории config выполните

resources.db.adapter = PDO_MYSQL
resources.db.isDefaultAdapter = true
resources.db.params.host = localhost
resources.db.params.username = username
resources.db.params.password = pwd
resources.db.params.dbname = mydatabase

, и всякий раз, когда / где вам нужно $ db, просто выполните

$db = Zend_Db_Table::getDefaultAdapter()

. Это лучший способ сделать это.

2 голосов
/ 07 декабря 2012
public function ActionnameAction()
{
    $params=array(
            'host' =>'localhost',
            'username' =>'username',
            'password' =>'password',
            'dbname' =>'database_name');

    $db = Zend_Db::Factory('PDO_MYSQL',$params);
    $sql="select * from table_name";
    $result=$db->fetchAll($sql);
 }
0 голосов
/ 21 февраля 2011

Если я не помню неправильно, адаптеры чувствительны к регистру.Вы должны использовать Pdo_Mysql.Исключение, которое вы получаете, похоже, не связано с этим.

...