Wrapper to Zend_Db не работает - PullRequest
       1

Wrapper to Zend_Db не работает

0 голосов
/ 24 ноября 2010

All

Я написал следующую обертку, которая расширяет класс Zend_Db для обеспечения возможности подключения БД ко всему моему приложению. Связь с БД работает нормально, но не может выполнять запросы при вызове из другого класса.

class Testapp_DB extends Zend_Db {

        //Declare member variables.
        public $db          = null;
        public $db_host     = "";
        public $db_database = "";
        public $db_username = "";
        public $db_password = "";


 public function __construct()
        {

            //Read Database Info from Config File
            $this->db_host      = Testapp_Registry::get('config')->db->mysql->host;
            $this->db_database  = Testapp_Registry::get('config')->db->mysql->dbname;
            $this->db_username  = Testapp_Registry::get('config')->db->mysql->username;
            $this->db_password  = Testapp_Registry::get('config')->db->mysql->password;

            $db = Zend_Db::factory('Mysqli', array(
                'host'     => $this->db_host,
                'username' => $this->db_username,
                'password' => $this->db_password,
                'dbname'   => $this->db_database
            ));

            $db->getConnection(); //Works fine
            $this->db = $db;
 }
}

Попытка выполнить запрос в файле PHP, который включает в себя Testapp_DB - не удается ..

<?php

 $db = new Testapp_DB();
 print_r($db);  //I can see the DB object here
 $sql = 'SELECT * FROM tb_Log';
 $result = $db->fetchAll($sql, 2); //This method fails.. Don't know why. Any ideas?
 print_r($result);
?>

Может кто-нибудь объяснить, почему метод fetchAll не работает?

Спасибо

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

* Zend_Db * не имеет никакого другого метода, кроме factory () .

Я не совсем понимаю, что вы пытаетесь решить таким способом, но насколько я вас вижунужно позвонить query () таким образом

$db->db->query();
0 голосов
/ 30 апреля 2011

Попробуйте создать файл SQL, например schema.mysql.sql, затем протестируйте его на phpMyAdmin и, если он свободен от ошибок, запустите этот код:

$bootstrap = $application->getBootstrap();
$bootstrap->bootstrap(‘db’);
$config = $bootstrap->getResource(‘db’)->getConfig();
$runCommand = “mysql -h “.$config["host"].” -P “.$config["port"].” -u’”.$config["username"].”‘ -p’”.$config["password"].”‘ “.$config["dbname"].” < “.dirname(__FILE__) . ‘/schema.mysql.sql’;
echo $runCommand;
system($runCommand);

Надеюсь, это поможет! http://www.unexpectedit.com/zend-php/zend-db-exec-a-sql-file

0 голосов
/ 26 ноября 2010

Возможно, вместо того, чтобы использовать вашу обертку, попробуйте это:

// Note: change your config to have a 'params' entry
$db = Zend_Db::factory(Testapp_Registry::get('config')->db->mysql);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Zend_Registry::set('database', $db);

// in your config
...mysql.params.host = ...
...mysql.params.dbname = ...
...mysql.params.username = ...
...mysql.params.password = ...

Тогда ваши Zend_Db_Table объекты будут иметь соединение, и, кроме того, вы можете получить соединение, используя Zend_Registry::get('database'). И вы сделаете только одно соединение с базой данных один раз за запрос.

...