Database wil niet mee werken?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ruben Portier

Ruben Portier

10/04/2011 17:57:38
Quote Anchor link
Beste

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }
}

?>
Gewijzigd op 10/04/2011 17:58:10 door Ruben Portier
 
PHP hulp

PHP hulp

15/06/2021 12:36:35
 
Wouter J

Wouter J

10/04/2011 18:08:31
Quote Anchor link
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)
 
Ruben Portier

Ruben Portier

10/04/2011 18:31:59
Quote Anchor link
Ok bedankt!

Ik zal zo even het wachtwoord en de gebruikersnaam wijzigen.
Maar ik zal eens laten zien wat ik nu heb:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }
}

?>


en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$cycle
= new cycle;
$cycle->setRace("rit1", "37,68");

foreach($cycle->getRaces() as $cycleRaces)
{

    print $cycleRaces;
}


foreach($cycle->getDistances() as $cycleDistances)
{

    echo $cycleDistances;
}

?>


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!
 
Jelmer -

Jelmer -

11/04/2011 07:52:10
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function getRaces()
{

    $races = $this->database1->query("SELECT race_name FROM races");
    return $races->fetchAll();
}

?>
Gewijzigd op 11/04/2011 07:52:48 door Jelmer -
 
Ruben Portier

Ruben Portier

11/04/2011 20:05:45
Quote Anchor link
Oke, heel erg bedankt!

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    function getRaces()
    {

        $this->races = $this->database1->query("SELECT race_name FROM races");
        return $this->races->fetchAll();
    }

?>



<?php
$cycle
= new cycle;

echo $cycle->getRaces();
echo $cycle->getDistances();
?>
 
Joris van Rijn

Joris van Rijn

12/04/2011 09:20:27
Quote Anchor link
met fetchall() return je een array.
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.
 

12/04/2011 13:27:29
Quote Anchor link
Joris van Rijn op 12/04/2011 09:20:27:
(...)
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, ...
 
Ruben Portier

Ruben Portier

14/04/2011 10:47:09
Quote Anchor link
Ok, bedankt!

Het is gelukt met een foreach!
 
Arjan -

Arjan -

14/04/2011 10:51:50
Quote Anchor link
Ben ik nou gek of heb je nog steeds de mysql inloggegevens in je script staan? Iedereen zeurt hier over hoe een script zo veilig mogelijk gemaakt kan worden, terwijl de inloggegevens je hier om de oren vliegen. Zo wordt het wel erg gemakkelijk om in te breken (zover je het op deze manier inbreken kan noemen) op je website.....
Gewijzigd op 14/04/2011 10:54:26 door Arjan -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.