connectie problemen
het zit namelijk zo.
ik werk nu met PEAR voor de templates. Het zit zo, ik kan één keer een connectie leggen, maar als ik een tweed functie gebruik in dezelfde pagina, dan lukt het helemaal niet meer.
hier is mijn code die ik gebruik
dit is mijn connect
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
require_once('MDB2.php');
$dsn = "mysql://root:test1234@localhost/kul_db";
$mdb2 = MDB2::connect($dsn, TRUE);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
require_once('MDB2.php');
$dsn = "mysql://root:test1234@localhost/kul_db";
$mdb2 = MDB2::connect($dsn, TRUE);
if (PEAR::isError($mdb2)) {
die($mdb2->getMessage());
}
?>
dan wil ik twee verschillende selects doen
Code (php)
en
Code (php)
nu roep ik deze en de connect.php op in mijn programma maar hij wil dat geen twee keer doen.
// ophalen waardes van categorie uit database
function alleWaCat(){
require_once('dbacties/connect.php');
require_once('dbacties/selectWaCat.php');
include_once('klassen/WaardeCat.php');
$arrWaCat = array();
while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC))) {
$wa = new WaardeCat();
$wa->setID($row['id']);
$wa->setCijfer($row['cijfer']);
$wa->setUitleg($row['uitleg']);
array_push($arrWaCat,$wa);
}
return $arrWaCat;
}
// ophalen categorieën uit database
function alleCat(){
require_once('dbacties/connect.php');
require_once('dbacties/selectCat.php');
include_once('klassen/Categorie.php');
$arrCat = array();
while (($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC))) {
$cat = new Categorie();
$cat->setID($row['id']);
$cat->setNaamNL($row['naamnl']);
$cat->setBeschrijvingNL($row['beschrijvingnl']);
$cat->setNaamEN($row['naamen']);
$cat->setBeschrijvingEN($row['beschrijvingen']);
array_push($arrCat,$cat);
}
return $arrCat;
}
?>
ik denk dat het aan de require_once ligt, maar ik kan geen oplossing vinden om ze er maar één keer in te zetten.
deze twee functies worden vanuit één functie opgeroepen getData()
dit is de fout die hij geeft:
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\tripplanner\dbacties\selectCat.php on line 5
Gewijzigd op 01/01/1970 01:00:00 door Elias
Altijd de foutmelding vermelden.
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\tripplanner\dbacties\selectCat.php on line 5
Hij zegt dat query() een gebruikersfunctie is, die je aanroept op een niet-object.
dus ik snap niet goed waarom ik het geen tweede keer in zelfde pagina kan gebruiken.
Include je connect.php ook twee keer, of niet?
ik denk dat ik meer één keer connectie kan maken, en die telkens dan moet gebruiken, maar ik weet dus niet hoe ik dat moet doen.
je gebruikt require_once... de eerste keer wordt deze gerequired... in je 2e functie gebruik je hem weer, maar wordt hij niet required omdat jij dat tegen php zegt: "laad deze als ik deze nog niet eerder heb geladen"
hoe kan ik ervoor zorgen dat deze de tweede keer herkend wordt?
Eén keer is voldoende. Daarna kun je de variabele waar je de query functie op loslaat gewoon weer gebruiken ;-).
Ik heb het in de frontcontroller gezet (dus één keer) en dan werk het nog niet.
Gewijzigd op 01/01/1970 01:00:00 door elias
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// include connect.php bovenaan je pagina
// of bovenaan de pagina waarin je andere pagina's include
// (denk aan het ?p=<pagina> systeem)
include("connect.php");
$result1 = $mdb2->query("SELECT...");
// foutafhandeling
$result2 = $mdb2->query("UPDATE...");
// foutafhandeling
?>
// include connect.php bovenaan je pagina
// of bovenaan de pagina waarin je andere pagina's include
// (denk aan het ?p=<pagina> systeem)
include("connect.php");
$result1 = $mdb2->query("SELECT...");
// foutafhandeling
$result2 = $mdb2->query("UPDATE...");
// foutafhandeling
?>
het probleem is dus dat da precies niet lukt bij mij.
is er trouwens een verschil tussen 'include' en 'include_once'?
en wat bedoel je met "(denk aan het ?p=<pagina> systeem)"?
alvast bedankt voor de moeite trouwens
moet ik trouwens na elke actie met de database mijn connectie sluiten?
Niet na iedere actie, maar het is wel netjes om dat te doen wanneer jouw script klaar is. Dus aan het einde van ieder script. Dan weet je zeker dat de database niet verstopt raakt met een grote hoeveelheid inactieve connecties.
voor Djemo, ik heb trouwens de fout ontdekt.
Ik heb dus zoals je zei nu maar één keer de connect geinclude, maar dat bleek dus niet de fout te zijn.
de fout lag zoals de error dus zei in het feit dat de variabele van de connectie mdb2 niet global stond in de andere functies dus niet herkend werd.
global word in php blijkbaar anders gebruikt als in andere talen en had het daarom niet door hoe ik het moest oplossen.
in andere talen declareer je ja var global en dan kun je ze overal gebruiken, hier moet je ze blijkbaar global in de functie waar je ze wil gebruiken. ik weet dat het basis is, maar had het dus niet door.
in ieder geval Djemo, pgFrank en de rest bedankt om te helpe