On Feb 6, 2008 11:33 AM, Garri Santos <[EMAIL PROTECTED]> wrote:

> On Feb 6, 2008 11:22 AM, Matthew Weier O'Phinney <[EMAIL PROTECTED]> wrote:
>
> > -- Garri Santos <[EMAIL PROTECTED]> wrote
> > (on Wednesday, 06 February 2008, 10:43 AM +0800):
> > > Good Day,
> > >
> > > Im not sure anymore whether it's my xml file or is it Zend_Config_Xml
> > has the
> > > problem. Here's my xml file.
> > >
> > > config.xml
> > > <?xml version="1.0" encoding="UTF-8" ?>
> > > <configuration>
> > > <default>
> > > <baseurl>/ubraa/public</baseurl>
> > > <database>
> > > <type>pdo_mysql</type>
> > > <host>localhost</host>
> > > <username>root</username>
> > > <password>password</password>
> > > <dbname>ubraa</dbname>
> > > </database>
> > > </default>
> > > </configuration>
> > >
> > > After doing this:
> > >
> > > $this->config = new Zend_Config_Xml($this->ubraaRoot .
> > DIRECTORY_SEPARATOR .
> > > 'configuration' . DIRECTORY_SEPARATOR .
> > > 'config.xml', 'default');
> > >
> > > The Zend_Db::factory($config->type, $config); is throwing me an error
> >
> > Um... shouldn't that be
> >
> >    Zend_Db::factory($config->database->type, $config->database);
> >
> > ?
> >
> > Based on the structure of your XML, you're not pulling from the correct
> > location in the config...
> >
> >
> > > Adapter parameters must be in an array or a Zend_Config object
> > >
> > > I have var_dump($this->config->database) and these is the result:
> > >
> > > object(Zend_Config_Xml)#2 (6) {
> > >  ["_allowModifications:protected"]=>
> > >  bool(false)
> > >  ["_index:protected"]=>
> > >  int(0)
> > >  ["_count:protected"]=>
> > >  int(2)
> > >  ["_data:protected"]=>
> > >  array(2) {
> > >    ["baseurl"]=>
> > >    string(13) "/ubraa/public"
> > >    ["database"]=>
> > >    object(Zend_Config)#4 (6) {
> > >      ["_allowModifications:protected"]=>
> > >      bool(false)
> > >      ["_index:protected"]=>
> > >      int(0)
> > >      ["_count:protected"]=>
> > >      int(5)
> > >      ["_data:protected"]=>
> > >      array(5) {
> > >        ["type"]=>
> > >        string(9) "pdo_mysql"
> > >        ["host"]=>
> > >        string(9) "localhost"
> > >        ["username"]=>
> > >        string(4) "root"
> > >        ["password"]=>
> > >        string(8) "password"
> > >        ["dbname"]=>
> > >        string(5) "ubraa"
> > >      }
> > >      ["_loadedSection:protected"]=>
> > >      NULL
> > >      ["_extends:protected"]=>
> > >      array(0) {
> > >      }
> > >    }
> > >  }
> > >  ["_loadedSection:protected"]=>
> > >  string(7) "default"
> > >  ["_extends:protected"]=>
> > >  array(0) {
> > >  }
> > > }
> > >
> > > Notice that the Zend_Config produce by the Zend_Config_Xml is missing
> > "params"
> > > w/c should contain a correct Zend_Config Object like this:
> > > $configuration = new Zend_Config(
> > >                array(
> > >                    'database' => array(
> > >                        'adapter' => 'Mysqli',
> > >                        'params' => array(
> > >                            'dbname' => 'test',
> > >                            'username' => 'webuser',
> > >                            'password' => 'secret',
> > >                        )
> > >                    )
> > >                )
> > > );
> > >
> > > object(Zend_Config)#32 (6) {
> > >  ["_allowModifications:protected"]=>
> > >  bool(false)
> > >  ["_index:protected"]=>
> > >  int(0)
> > >  ["_count:protected"]=>
> > >  int(1)
> > >  ["_data:protected"]=>
> > >  array(1) {
> > >    ["database"]=>
> > >    object(Zend_Config)#40 (6) {
> > >      ["_allowModifications:protected"]=>
> > >      bool(false)
> > >      ["_index:protected"]=>
> > >      int(0)
> > >      ["_count:protected"]=>
> > >      int(2)
> > >      ["_data:protected"]=>
> > >      array(2) {
> > >        ["adapter"]=>
> > >        string(6) "Mysqli"
> > >        ["params"]=>
> > >        object(Zend_Config)#43 (6) {
> > >          ["_allowModifications:protected"]=>
> > >          bool(false)
> > >          ["_index:protected"]=>
> > >          int(0)
> > >          ["_count:protected"]=>
> > >          int(3)
> > >          ["_data:protected"]=>
> > >          array(3) {
> > >            ["dbname"]=>
> > >            string(4) "test"
> > >            ["username"]=>
> > >            string(7) "webuser"
> > >            ["password"]=>
> > >            string(6) "secret"
> > >          }
> > >          ["_loadedSection:protected"]=>
> > >          NULL
> > >          ["_extends:protected"]=>
> > >          array(0) {
> > >          }
> > >        }
> > >      }
> > >      ["_loadedSection:protected"]=>
> > >      NULL
> > >      ["_extends:protected"]=>
> > >      array(0) {
> > >      }
> > >    }
> > >  }
> > >  ["_loadedSection:protected"]=>
> > >  NULL
> > >  ["_extends:protected"]=>
> > >  array(0) {
> > >  }
> > > }
> > >
> > >
> > > Thanks,
> > > Garri
> >
> > --
> > Matthew Weier O'Phinney
> > PHP Developer            | [EMAIL PROTECTED]
> > Zend - The PHP Company   | http://www.zend.com/
> >
>
> Hi Matthew,
>
> I have tried your suggestion but still no luck. Here's the part that uses
> $this->config.
>
>     public function getDb()
>     {
>         if (null === $this->_services['db']) {
>             $config = $this->config->database;
>             //$this->_services['db'] = Zend_Db::factory($config->type,
> $config);
>             $this->_services['db'] =
> Zend_Db::factory($config->database->type, $config->database);
>         }
>
>         return $this->_services['db'];
>     }
>
> As you can see I have already assigned $this->config->database to $config.
> Though I have tried what you have suggest again it's throwing me the same
> error.
>

Good Day,

It's finally working now thanks to all you guys here and SpotSec at #zftalk.

Can we remove "or a Zend_Config object" in the Zend/Db.php line no. 217 it's
confusing since the code block is just checking if the passed parameter
$config is an array.

        /*
         * Verify that adapter parameters are in an array.
         */
        if (!is_array($config)) {
            /**
             * @see Zend_Db_Exception
             */
            require_once 'Zend/Db/Exception.php';
            throw new Zend_Db_Exception('Adapter parameters must be in an
array or a Zend_Config object');
        }

and the fix is to call toArray() method. Instead of passing a Zend_Config
object for the $config parameters in Zend_Db::factory($adapter, $config);


Cheers,
Garri

Reply via email to