[ZF] Db_Table (Opgelost)
Oneday - 12/03/2011 23:11 (laatste wijziging 13/03/2011 09:28)
Nieuw lid
Hey, ik heb al vanalles geprobeerd maar 't lukt me maar niet connectie te maken met de database vanop mijn zend framework.
Ik heb volgende in mijn application.ini staan:
recources.db.adapter = "PDO_MYSQL"
recourses.db.params.host = "localhost"
recourses.db.params.username = "root"
recources.db.params.password = ""
recourses.db.params.dbname = "bspot"
recources.db.adapter = "PDO_MYSQL"
recourses.db.params.host = "localhost"
recourses.db.params.username = "root"
recources.db.params.password = ""
recourses.db.params.dbname = "bspot"
Dus als ik 't goed begrijp zou ik dan makkelijk moeten kunnen connecteren naar die database.
Dat lukt wel als ik elke keer manueel op de klassieke manier connectie maak maar dit is natuurlijk niet de bedoeling binnen een framework.
Ik zou mijn models gewoon willen extenden met bijvoorbeeld Zend_Db_Table moet dat dan zijn geloof ik? Zodat elke model indien nodig access heeft tot de database.
Maar dit lukt me niet, iemand een idee waar ik dit dan nog verder moet instellen?
26 antwoorden
Gesponsorde links
lemoinet - 13/03/2011 00:24
PHP gevorderde
je moet je adapter ook nog definiëren
bvb.
resources.db.adapter = Pdo_Mysql
resources. db. adapter = Pdo_Mysql
Oneday - 13/03/2011 09:27
Nieuw lid
lemoinet schreef:
je moet je adapter ook nog definiëren
bvb.
[..code..]
Ah sorry, die stond er ook al in, was die vergeten te copy-pasten.
shibble - 13/03/2011 11:02
MySQL interesse
Krijg je niet een foutmelding als je in development modus werkt?
Als ik in development modus werk (Localhost) heb ik in me htaccess aangegeven dat het Development is en in mijn application.ini heb ik nog een aparte [development : production] en daarin weer de instellingen: "display_startup_error", "Display_errors" en "resources.frontController.throwExceptions = true".
Als iets fout gaat dan krijg ik altijd een foutmelding dus als ik geen DB Connecte kan maken krijg ik wel een melding met het probleem.
Oneday - 13/03/2011 11:07
Nieuw lid
shibble schreef:
Krijg je niet een foutmelding als je in development modus werkt?
Als ik in development modus werk (Localhost) heb ik in me htaccess aangegeven dat het Development is en in mijn application.ini heb ik nog een aparte [development : production] en daarin weer de instellingen: "display_startup_error", "Display_errors" en "resources.frontController.throwExceptions = true".
Als iets fout gaat dan krijg ik altijd een foutmelding dus als ik geen DB Connecte kan maken krijg ik wel een melding met het probleem.
Display exceptions stond op 0, heb 't ff op true gezet, ik krijg volgende error:
Exception information:
Message: No adapter found for Application_Model_K8055
Stack trace:
#0 C:\wamp\www\bspot\library\Zend\Db\Table\Abstract.php(739): Zend_Db_Table_Abstract->_setupDatabaseAdapter()
#1 C:\wamp\www\bspot\library\Zend\Db\Table\Abstract.php(268): Zend_Db_Table_Abstract->_setup()
#2 C:\wamp\www\bspot\library\Zend\Db\Table.php(77): Zend_Db_Table_Abstract->__construct(Array)
#3 C:\wamp\www\bspot\application\modules\index\controllers\manueelController.php(22): Zend_Db_Table->__construct()
#4 C:\wamp\www\bspot\library\Zend\Controller\Action.php(513): manueelController->indexAction()
#5 C:\wamp\www\bspot\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#6 C:\wamp\www\bspot\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\wamp\www\bspot\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#8 C:\wamp\www\bspot\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#9 C:\wamp\www\bspot\public\index.php(26): Zend_Application->run()
#10 {main}
Exception information:
Message: No adapter found for Application_Model_K8055
Stack trace:
#0 C:\wamp\www\bspot\library\Zend\Db\Table\Abstract.php(739): Zend_Db_Table_Abstract->_setupDatabaseAdapter()
#1 C:\wamp\www\bspot\library\Zend\Db\Table\Abstract.php(268): Zend_Db_Table_Abstract->_setup()
#2 C:\wamp\www\bspot\library\Zend\Db\Table.php(77): Zend_Db_Table_Abstract->__construct(Array)
#3 C:\wamp\www\bspot\application\modules\index\controllers\manueelController.php(22): Zend_Db_Table->__construct()
#4 C:\wamp\www\bspot\library\Zend\Controller\Action.php(513): manueelController->indexAction()
#5 C:\wamp\www\bspot\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#6 C:\wamp\www\bspot\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\wamp\www\bspot\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#8 C:\wamp\www\bspot\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#9 C:\wamp\www\bspot\public\index.php(26): Zend_Application->run()
#10 {main}
Wat ik nu heb gedaan is m'n model ge-extend naar Zend_Db_Table
shibble - 13/03/2011 11:57
MySQL interesse
Hoe ziet je Model K8055 eruit?
Oneday - 13/03/2011 14:35
Nieuw lid
<?php
class Application_Model_K8055 extends Zend_Db_Table
{
protected $_name = 'instellingen';
protected $_port = array(
'pomp' => 1,
'zonnecollectoren' => 2
);
protected $_prefix = array(
'pomp' => 'DO',
'zonnecollectoren' => 'DO'
);
public function getMode()
{
$sql = "SELECT `mode` FROM instellingen";
echo $sql;
die();
}
public function getAll()
{
exec('c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,READ',$result);
foreach ($result as $value)
{
if (strstr($value,"=") !== false)
{
$explode = explode('=',$value);
$array[$explode[0]] = $explode[1];
}
}
return $array;
}
public function getZonnecollectoren()
{
$array = $this->getAll();
return $array[$this->_prefix['zonnecollectoren'].$this->_port['zonnecollectoren']];
}
public function setZonnecollectoren($status = 0)
{
exec('c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,BIT'.$status.','.$this->_port['zonnecollectoren'],$result);
return $result;
}
public function getPomp()
{
$array = $this->getAll();
return $array[$this->_prefix['pomp'].$this->_port['pomp']];
}
public function setPomp($status = 0)
{
exec('c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,BIT'.$status.','.$this->_port['pomp'],$result);
return $result;
}
}
<?php
class Application_Model_K8055 extends Zend_Db_Table
{
protected $_name = 'instellingen' ;
protected
$_port = array ( 'pomp' => 1 ,
'zonnecollectoren' => 2
) ;
protected
$_prefix = array ( 'pomp' => 'DO' ,
'zonnecollectoren' => 'DO'
) ;
public function getMode( )
{
$sql = "SELECT `mode` FROM instellingen" ;
}
public function getAll( )
{
exec ( 'c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,READ' , $result ) ; foreach ( $result as $value )
{
if ( strstr ( $value , "=" ) !== false ) {
$array [ $explode [ 0 ] ] = $explode [ 1 ] ;
}
}
return $array ;
}
public function getZonnecollectoren( )
{
$array = $this -> getAll ( ) ;
return $array [ $this -> _prefix[ 'zonnecollectoren' ] . $this -> _port[ 'zonnecollectoren' ] ] ;
}
public function setZonnecollectoren( $status = 0 )
{
exec ( 'c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,BIT' . $status . ',' . $this -> _port
[ 'zonnecollectoren' ] , $result ) ; return $result ;
}
public function getPomp( )
{
$array = $this -> getAll ( ) ;
return $array [ $this -> _prefix[ 'pomp' ] . $this -> _port[ 'pomp' ] ] ;
}
public function setPomp( $status = 0 )
{
exec ( 'c:\wamp\bin\apache\Apache2.2.17\cgi-bin\K8055.exe 0,BIT' . $status . ',' . $this -> _port
[ 'pomp' ] , $result ) ; return $result ;
}
}
lemoinet - 13/03/2011 14:36
PHP gevorderde
en als je dit nog in ja application.ini erbij zet
resources.db.isDefaultTableAdapter = true
resources. db. isDefaultTableAdapter = true
Oneday - 13/03/2011 14:43
Nieuw lid
lemoinet schreef:
en als je dit nog in ja application.ini erbij zet
[..code..]
Zelfde error
lemoinet - 13/03/2011 14:48 (laatste wijziging 13/03/2011 14:48)
PHP gevorderde
het is res ourc es ipv recourses
Oneday - 13/03/2011 15:03 (laatste wijziging 13/03/2011 15:08)
Nieuw lid
lemoinet schreef:
het is res ourc es ipv recourses
Ouch Weer zo'n domme fout van me!
ik heb nu dit:
$result = $this->select("mode")->from("instellingen");
Zend_Debug::dump($result);
$result = $this -> select ( "mode" ) -> from ( "instellingen" ) ;
Zend_Debug:: dump ( $result ) ;
Nu krijg ik een heleboel andere dingen mee in de result array die er niet bij moeten.
lemoinet - 13/03/2011 15:09
PHP gevorderde
je kan best je error_reporting aanzetten. dan krijg je tenminste al een foutmelding
Oneday - 13/03/2011 15:35 (laatste wijziging 13/03/2011 15:36)
Nieuw lid
Nu krijg ik geen foutmelding meer, maar gewoon een dump van het opbject:
http://plaatscode.be/140807 /
lemoinet - 13/03/2011 18:50 (laatste wijziging 13/03/2011 18:54)
PHP gevorderde
ik denk dat dit het ongeveer moet zijn.
public function getMode()
{
$select = $this->select()
->from($this->_name, array('mode'));
return $this->fetchAll($select);
}
public function getMode( )
{
$select = $this -> select ( )
-> from ( $this -> _name
, array ( 'mode' ) ) ; return $this -> fetchAll ( $select ) ;
}
Oneday - 13/03/2011 19:13
Nieuw lid
lemoinet schreef:
ik denk dat dit het ongeveer moet zijn.
[..code..]
Ik krijg hetzelfde als resultaat.
lemoinet - 13/03/2011 19:57
PHP gevorderde
zet dan toch eens je error_reporting en display_errors op, zodat we kunnen weten welke fout je krijgt.
application.ini
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.error_reporting = 8191
phpSettings. display_startup_errors = 1
phpSettings. display_errors = 1
Oneday - 13/03/2011 19:58
Nieuw lid
lemoinet schreef:
zet dan toch eens je error_reporting en display_errors op, zodat we kunnen weten welke fout je krijgt.
application.ini
[..code..]
Had ik al gedaan, maar hij geeft geen fout.
lemoinet - 13/03/2011 19:59
PHP gevorderde
doe eens var_dump($this->fetchAll($select));
Oneday - 13/03/2011 20:00
Nieuw lid
lemoinet schreef:
doe eens var_dump($this->fetchAll($select));
Dat is dezelfde dump als ik enkele posts geleden postte:
http://plaatscode.be/140807
lemoinet - 13/03/2011 20:13
PHP gevorderde
dat kan dezelfde dump niet zijn.
je moet een object van type Zend_Db_Table_Rowset terugkrijgen ipv type Zend_Db_Table_Select
Oneday - 13/03/2011 20:19
Nieuw lid
lemoinet schreef:
dat kan dezelfde dump niet zijn.
je moet een object van type Zend_Db_Table_Rowset terugkrijgen ipv type Zend_Db_Table_Select
Hm oké idd:
http://plaatscode.be/140808 /
lemoinet - 13/03/2011 20:22
PHP gevorderde
uit je dump is duidelijk te merken dat je wel een array terug krijgt.
protected '_data' =>
array
0 =>
array
'mode' => string '1' (length=1)
protected '_data' =>
0 =>
'mode' => string '1' ( length= 1 )
dus het probleem moet ergens anders liggen, controller of view
Oneday - 13/03/2011 20:40
Nieuw lid
lemoinet schreef:
uit je dump is duidelijk te merken dat je wel een array terug krijgt.
[..code..]
dus het probleem moet ergens anders liggen, controller of view
maar ik doe de dump zelf in het model als je dat bedoeld? Gevolgd door die();
lemoinet - 13/03/2011 20:45
PHP gevorderde
gewoon terug
return $this->fetchAll($select);
return $this -> fetchAll ( $select ) ;
dump en die verwijderen.
dat je een lege pagina krijgt zal ergens anders aan liggen.
hoe ziet de controller en view van je "lege" pagina eruit?
Oneday - 13/03/2011 20:52
Nieuw lid
lemoinet schreef:
gewoon terug
[..code..]
dump en die verwijderen.
dat je een lege pagina krijgt zal ergens anders aan liggen.
hoe ziet de controller en view van je "lege" pagina eruit?
Nu krijg ik geen lege pagina meer, maar dingen uit de database halen lukt me dus niet zoals je ziet in de dumps in vorige posts. :S
lemoinet - 13/03/2011 20:59
PHP gevorderde
uit je vorige dump kreeg je wel data uit je database
protected '_data' =>
array
0 =>
array
'mode' => string '1' (length=1)
protected '_data' =>
0 =>
'mode' => string '1' ( length= 1 )
geef eens een voorbeeld waar je de gegevens uitleest
Oneday - 13/03/2011 21:13 (laatste wijziging 13/03/2011 22:44)
Nieuw lid
lemoinet schreef:
uit je vorige dump kreeg je wel data uit je database
[..code..]
geef eens een voorbeeld waar je de gegevens uitleest
Maar hoe haal ik daar die 'mode' dan uit?? Want ik wil gewoon tabelletje weergeven van database inhoud:
bv
id: 1 - mode: 1
id: 2 - mode: 4
Dus gebruik ik deze query :
$select = $this->select()
->from($this->_name, array('mode'));
$return = $this->fetchAll($select);
$select = $this -> select ( )
-> from ( $this -> _name
, array ( 'mode' ) ) ; $return = $this -> fetchAll ( $select ) ;
Maar hoe kan ik die 'mode' nu uit die return halen?
Normaalgezien krijg je gewoon een array met wat je uit de database terugkrijgt toch?
EDIT:
Ik heb de oplossing gevonden. ^,^ Blijkbaar kon je bij een fetchAll() of fetchRow() ook een toArray() doen waardoor je enkel hetgene dat je opvroeg in de database kreeg.
array
0 =>
array
'mode' => string '1' (length=1)
0 =>
'mode' => string '1' ( length= 1 )
Zeer hard bedankt voor je hulp iig!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.