Database wil niet mee werken?
Ik ben sinds deze morgen bezig met een maken van een heel simpel script. Dit om mijn OOP ervaring te verbeteren. Het lukt, volgens mij, redelijk goed. Tot ik opeens op de MySQLi connectie stoote.
De foutmelding die ik kreeg was: "Fatal error: Call to a member function query() on a non-object in...".
Ik had dit vroeger ook al meegemaakt en ik ben er achter gekomen (via Google weliswaar) dat het te maken heeft dat het MySQLi object niet te gebruiken is binnen een andere class. Hiervoor zou je een eigen class moeten schrijven.
Ik ben dus aan het werk gegaan maar zit nog altijd met diezelfde foutmelding.
Ik hoop dus dat iemand van jullie mij kan verder helpen/meer uitleg kan geven?
Zeer vriendelijk bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
class databaseConnection
{
function __construct()
{
$database = new mysqli("localhost", "root", "Ati12ev", "oop-scripts");
if(mysqli_connect_errno())
{
trigger_error("Error while connecting to database: ".$mysqli->error);
}
}
function query($query)
{
return $database->query($query);
}
}
class cycle
{
var $races;
var $distances;
function __construct()
{
$database1 = new databaseConnection;
}
function getRaces()
{
$races = $database1->query("SELECT race_name FROM races");
return $races->fetch_row();
}
function getDistances()
{
$distances = $database1->query("SELECT distance FROM races");
return $distances->fetch_row();
}
function setRace($name, $distance)
{
$this->name = $name;
$this->distance = $distance;
}
}
?>
class databaseConnection
{
function __construct()
{
$database = new mysqli("localhost", "root", "Ati12ev", "oop-scripts");
if(mysqli_connect_errno())
{
trigger_error("Error while connecting to database: ".$mysqli->error);
}
}
function query($query)
{
return $database->query($query);
}
}
class cycle
{
var $races;
var $distances;
function __construct()
{
$database1 = new databaseConnection;
}
function getRaces()
{
$races = $database1->query("SELECT race_name FROM races");
return $races->fetch_row();
}
function getDistances()
{
$distances = $database1->query("SELECT distance FROM races");
return $distances->fetch_row();
}
function setRace($name, $distance)
{
$this->name = $name;
$this->distance = $distance;
}
}
?>
Gewijzigd op 10/04/2011 17:58:10 door Ruben Portier
Je kan beter je wachtwoord en gebruikersnaam uit het script halen, het staat nu openbaar op internet
Ik zou als ik jou was geen MySQLi gebruiken, maar je gaan verdiepen in PDO (goede tut)
Ik zou als ik jou was geen MySQLi gebruiken, maar je gaan verdiepen in PDO (goede tut)
Ik zal zo even het wachtwoord en de gebruikersnaam wijzigen.
Maar ik zal eens laten zien wat ik nu heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class cycle
{
var $database1;
var $races;
var $distances;
function __construct()
{
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
}
function getRaces()
{
$races = $this->database1->query("SELECT race_name FROM races");
return array($races);
}
function getDistances()
{
$distances = $this->database1->query("SELECT distance FROM races");
return array($distances);
}
function setRace($name, $distance)
{
$this->name = $name;
$this->distance = $distance;
}
}
?>
class cycle
{
var $database1;
var $races;
var $distances;
function __construct()
{
$this->database1 = new PDO('mysql:host=localhost;dbname=oop-scripts', 'root', 'Ati12ev');
}
function getRaces()
{
$races = $this->database1->query("SELECT race_name FROM races");
return array($races);
}
function getDistances()
{
$distances = $this->database1->query("SELECT distance FROM races");
return array($distances);
}
function setRace($name, $distance)
{
$this->name = $name;
$this->distance = $distance;
}
}
?>
en
Code (php)
Ik snap niet waarom ik nog de volgende foutmelding krijg: "Catchable fatal error: Object of class PDOStatement could not be converted to string in...".
Toch bedankt!
PDO::query geeft een instantie van PDOStatement terug. Ja, als je die in een array stopt heb je een array met één element, en dat is een PDOStatement object.
Jij verwacht een array van resultaten van je query. Daar kan je PDOStatement::fetchAll wel voor gebruiken, die geeft een array terug.
Jij verwacht een array van resultaten van je query. Daar kan je PDOStatement::fetchAll wel voor gebruiken, die geeft een array terug.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function getRaces()
{
$races = $this->database1->query("SELECT race_name FROM races");
return $races->fetchAll();
}
?>
function getRaces()
{
$races = $this->database1->query("SELECT race_name FROM races");
return $races->fetchAll();
}
?>
Gewijzigd op 11/04/2011 07:52:48 door Jelmer -
Maar als ik die nu echo krijg ik te zien: Array.
Ik snap dus niet hoe dat komt?
Moet ik misschien met een foreach werken ofzo?
Dit is mijn code:
Die weergeef je niet met echo maar met print_r
Dat is natuurlijk alleen om even te kijken wat in de array zit.
Toevoeging op 12/04/2011 09:21:10:
Ruben Portier op 11/04/2011 20:05:45:
Moet ik misschien met een foreach werken ofzo?
Ja! Je moet inderdaad met een foreach werken.
Joris van Rijn op 12/04/2011 09:20:27:
(...)
Ja! Je moet inderdaad met een foreach werken.
Ruben Portier op 11/04/2011 20:05:45:
Moet ik misschien met een foreach werken ofzo?
Ja! Je moet inderdaad met een foreach werken.
Nee, kan, er zijn veel meer mogelijkheden ;-)
for, while, iterator, ...
Het is gelukt met een foreach!
Gewijzigd op 14/04/2011 10:54:26 door Arjan -