Versio

Mysql Class

Overzicht Reageren

Ruliezz liezz

Ruliezz liezz

20/06/2010 15:14:45
Quote Anchor link
Hee Allemaal,

Ik ben bezig om OOP te leren, zo ben ik nu bezig met het maken van een MySQL class. Dit mij het gemakkelijk maakt om querys naar de database te zenden. Natuurlijk zijn er genoeg class te vinden maar wat ik al zonet vertelde, het was om te leren.

Mijn mysql.class.php

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
<?php

class mysql
{
    var
$sServer;
    var
$sUserName;
    var
$sPassWord;
    var
$sDataBase;
    var
$sCommand;
    public $queryprompt;
        
    public function __construct($sUserName, $sPassWord, $sDataBase)
    {

        $this->sServer        =     "localhost";
        $this->sUserName    =     $sUserName;
        $this->sPassWord    =     $sPassWord;
        $this->sDataBase    =     $sDataBase;
        
    }


    /*
        Connection to the database
        Returns a error if the connetion failed
    */

    public function connectToDB()
    {

        if(!mysql_connect($this->sServer,$this->sUserName,$this->sPassWord) || !mysql_select_db($this->sDataBase)) {
            return "There is some problem";
        }
    }

    
    public function query($sCommand)
    {

        $queryprompt = mysql_query($sCommand, $this->connectToDB());
    }
        
    
    public function getRecord()
    {

        $data = mysql_fetch_array($this->queryprompt);
        return $data;
    }
}

?>


Mijn test bestand:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

include_once( "mysql.class.php" );

$db = new mysql("gebruikersnaam","wachtwoord", "databasenaam");

$db->connectToDB();
$db->query("SELECT * FROM klanten");
$db->getRecord();

?>


Op moment krijg ik deze error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/classtest/mysql.class.php on line 46

Wat doe ik nou fout?
 
PHP hulp

PHP hulp

25/05/2012 06:28:59
Gesponsorde koppelingen:
 
Joris van Rijn

Joris van Rijn

20/06/2010 15:19:06
Quote Anchor link
regel 34 moet zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$this->queryprompt = mysql_query($sCommand, $this->connectToDB());
 
Ruliezz liezz

Ruliezz liezz

20/06/2010 15:22:00
Quote Anchor link
Joris van Rijn op 20/06/2010 15:19:06:
regel 34 moet zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$this->queryprompt = mysql_query($sCommand, $this->connectToDB());



Heb het aangepast, maar nog steeds de melding.
 
Joris van Rijn

Joris van Rijn

20/06/2010 15:23:57
Quote Anchor link
Wat is regel 46 in de code die jij had gepost?
Want regel 46 bestaat daar namelijk niet in.

Ik neem aan regel 39?
 
Ruliezz liezz

Ruliezz liezz

20/06/2010 15:26:07
Quote Anchor link
Joris van Rijn op 20/06/2010 15:23:57:
Wat is regel 46 in de code die jij had gepost?
Want regel 46 bestaat daar namelijk niet in.

Ik neem aan regel 39?


Dat klopt, ik heb in mijn class nog een blokje commentaar staan, maar regel 46 is:
$data = mysql_fetch_array($this->queryprompt);
 
Joren de Wit
Beheerder

Joren de Wit

20/06/2010 15:32:28
Quote Anchor link
Waar is de foutafhandeling van je query gebleven? Als je query mislukt zal $this->queryprompt false zijn en dus onbruikbaar zijn in mysql_fetch_array()...

Voeg dus de nodige foutafhandeling toe in je query() method, gooi bijvoorbeeld een Exception als de query mislukt is en geef dan als message in ieder geval de mysql_error() mee...

ps. Dat geldt trouwens ook voor je connectToDb() method, het is nutteloos om een string met 'There was a problem' te retourneren. Gooi dan liever een Exception met die melding.
Gewijzigd op 20/06/2010 15:33:43 door Joren de Wit
 
Ruliezz liezz

Ruliezz liezz

20/06/2010 15:38:39
Quote Anchor link
Blanche PHP op 20/06/2010 15:32:28:
Waar is de foutafhandeling van je query gebleven? Als je query mislukt zal $this->queryprompt false zijn en dus onbruikbaar zijn in mysql_fetch_array()...

Voeg dus de nodige foutafhandeling toe in je query() method, gooi bijvoorbeeld een Exception als de query mislukt is en geef dan als message in ieder geval de mysql_error() mee...

ps. Dat geldt trouwens ook voor je connectToDb() method, het is nutteloos om een string met 'There was a problem' te retourneren. Gooi dan liever een Exception met die melding.


Ja, die foutmelding is iets wat ik later er in wou bakken of via een error.class ofzo, ben nog aant leren dus thanks voor de input!

Maar hoe pak ik een variable op uit een andere function?
 
Pim -

Pim -

20/06/2010 15:57:32
Quote Anchor link
Dat kan niet, dan moet je hem of teruggeven met return, of opslaan in het object met $this->...
 
Joren de Wit
Beheerder

Joren de Wit

20/06/2010 16:05:01
Quote Anchor link
Ruliezz liezz op 20/06/2010 15:38:39:
Ja, die foutmelding is iets wat ik later er in wou bakken of via een error.class ofzo, ben nog aant leren dus thanks voor de input!


Jouw probleem wordt juist veroorzaakt doordat je nog niets aan foutafhandeling doet. Mijn vermoeden is dat de query die je uitvoert gewoon niet klopt, maar daar krijg je nu geen melding van.

Foutafhandeing is niet iets dat je in een later stadium toevoegt, dat hoort er vanaf het begin in te zitten! Desnoods laat je je script doodvallen met die() tijdens je leerproces, maar je zult toch op een of andere manier gewaarschuwd moeten worden als je query mislukt.

ps. Basis van een Exception gooien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
public function query($sCommand)
{

  $result = mysql_query($sCommand, $this->connectToDB());

  if($result === false) {
    throw new Exception('Query mislukt: '.mysql_error());
  }


  $this->queryprompt = $result;
}

?>
Gewijzigd op 20/06/2010 16:07:23 door Joren de Wit
 
Ruliezz liezz

Ruliezz liezz

20/06/2010 19:13:06
Quote Anchor link
Heb er nog even samen met een vriend naar gekeken, en het is nu opgelost! Hij werkt! We hebben het zo gedaan!

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
49
50
51
52
53
54
55
56
57
<?php

class mysql
{
    var
$sServer;
    var
$sUserName;
    var
$sPassWord;
    var
$sDataBase;
    var
$sCommand;
    public $queryprompt;
    public $data;
    public $conn;
        
    public function __construct($sUserName, $sPassWord, $sDataBase)
    {

        $this->sServer        =     "localhost";
        $this->sUserName    =     $sUserName;
        $this->sPassWord    =     $sPassWord;
        $this->sDataBase    =     $sDataBase;
        
        // Connect on setup
        $this->connectDB();
    }


    /*
        Connection to the database
        Returns a error if the connetion failed
    */

    
    public function connectDB()
    {

        if($this->conn = mysql_connect($this->sServer,$this->sUserName,$this->sPassWord))
        {

            if(mysql_select_db($this->sDataBase, $this->conn))
            {

                return $this->conn;
            }

            else print "db conn fail";
        }

        else print "not connected";
    }

    
    public function query($sCommand)
    {

        if(!$this->queryprompt = mysql_query($sCommand, $this->conn))
        print "query connect int putje";
        return;
    }
        
    
    public function getRecord()
    {

        $this->data = mysql_fetch_array($this->queryprompt);
        print $this->data;
        return $this->data;
    }
}

?>
 
Joren de Wit
Beheerder

Joren de Wit

20/06/2010 20:20:56
Quote Anchor link
Een paar zaken:

- Printen of echoën doe je liever niet direct vanuit een klasse. Laat je klasse enkel waarden teruggeven en echo deze gewoon in je procedurele code.
- De foutafhandeling die je nu gebruikt is vrij nutteloos. Je geeft een foutmelding die totaal niet weergeeft wat er nu eigenlijk fout gaat. Hoe wil je dan ook bepalen waar de fout zit?

De tip uit mijn vorige posts geldt nog steeds: gebruik Exceptions voor het afhandelen van je fouten. Dat is de meest gangbare manier als je met OOP aan de slag gaat...
 
Afra ca

Afra ca

20/06/2010 20:36:40
Quote Anchor link
En waarom maar het beperkte gebruik van "public $var" in je class, ik zie nog een aantal maal

var $var

staan, waar ik geen gegronde reden voor kan verzinnen, zet die ook om daar de "PHP5 manier. Probeer zelf netjes en consistent te programmeren, waaronder ook met Exceptions werken.
 
Ruliezz liezz

Ruliezz liezz

20/06/2010 22:23:09
Quote Anchor link
@Blanche PHP: Ja, klopt die foutafhandeling moet er nog in.
@Afra ca: hoe bedoel je, moet ik alles maar op public zetten?

Sorry, ben er nog niet zo in thuis in OOP.


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

        $this->data = mysql_fetch_array($this->queryprompt);
        return $this->data;
    }

?>


Hoe pak ik de data weer op? met een foreache in mijn procedurele code?
 
Joren de Wit
Beheerder

Joren de Wit

20/06/2010 22:28:32
 



Overzicht Reageren

Get Adobe Flash player