Versio

Mysql connection class

Overzicht Reageren

Youri van Mill

Youri van Mill

08/10/2010 14:39:33
Quote Anchor link
Ik ben nieuw in OOP.

Ik heb doormiddel van tuts een connectie class gemaakt.

Doe ik het zo goed, op deze manier?

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
class MySQL
{
    private $_host;
    private $_username;
    private $_password;
    private $_db;
    
    private $_conn;
  
    public function __construct($host, $user, $pass, $db)
    {
        $this->_host = $host;
        $this->_username = $name;
        $this->_password = $pass;
        $this->_db = $db;
    }

    public function connect()
    {
        $this->_conn = mysql_connect($this->_host, $this->_username, $this->_password);
        
        if(!$this->_conn)
        {
            return mysql_error();
        }
    }
}
 
PHP hulp

PHP hulp

25/05/2012 06:32:31
Gesponsorde koppelingen:
 
- Aar -

- Aar -

08/10/2010 19:18:43
Quote Anchor link
Het is geen connectie class, maar een MySQL class. Je man ook fetchen o.a toevoegen.
 
Youri van Mill

Youri van Mill

08/10/2010 22:59:10
Quote Anchor link
Het is natuurlijk ook de bedoeling om één aantal dingen toe te voegen.

Maar ben ik zo goed op weg?
 
Karl Karl

Karl Karl

08/10/2010 23:03:12
Quote Anchor link
Ik zou niet die error returnen in die connect. Maar dus de waarde van die connect.
Verder kan je eens naar pdo en mysqli kijken.
 
ILoran punt NL

iLoran punt NL

08/10/2010 23:06:49
Quote Anchor link
Miss heb je hier iets aan:

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
public function connect( $server, $username, $password, $database )
    {

        global $link;
        
        $link = new mysqli( $server, $username, $password, $database );
        
        // check connection
        if( mysqli_connect_errno() )
        {

            printf("Database connection failed: %s\n", mysqli_connect_error());
            exit();
        }
    }

?>
 
Karl Karl

Karl Karl

08/10/2010 23:16:26
Quote Anchor link
ILoran punt NL op 08/10/2010 23:06:49:
Miss heb je hier iets aan:

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
public function connect( $server, $username, $password, $database )
    {

        global $link;
        
        $link = new mysqli( $server, $username, $password, $database );
        
        // check connection
        if( mysqli_connect_errno() )
        {

            printf("Database connection failed: %s\n", mysqli_connect_error());
            exit();
        }
    }

?>


Gatver-tyfus-damme. WTF moet deze onzin voortellen?
- Functie om klasse heenschrijven? Gebruik dan geen klasse.
- Global? Global is vies, weg met global.
- Waarom kan je niet gewoon mysqli aanroepen, kan je gewoon $link gebruiken.
- Procedurale ondersteuning van mysqli is er alleen voor om te zorgen dat oudere php versies ook mysqli kunnen gebruiken. Waarom heb je dus niet gewoon de standaard OO manier gebruikt?
- NOOIT de fout die mysql teruggeeft aan de gebruiker weergeven. Alleen gebruiken voor debuggen.
- GA ZELF DOOD NEER VALLEN!
Gewijzigd op 08/10/2010 23:16:55 door Karl Karl
 
ILoran punt NL

iLoran punt NL

08/10/2010 23:19:27
Quote Anchor link
@Karl,

Waar slaat jouw reactie op?
Heel toevallig stond het zo in mijn schoolboek.....


Helaas wel!

"- GA ZELF DOOD NEER VALLEN!"
DOE NORMAAL!
 
Jelmer rrrr

Jelmer rrrr

09/10/2010 00:24:33
Quote Anchor link
Youri van Mill op 08/10/2010 14:39:33:
Ik ben nieuw in OOP.

Doe ik het zo goed, op deze manier?


Het werkt, dus je doet het niet heel fout. Maar waarom sla je de gebruikersnaam op in een member-variabele? Nadat je een verbinding hebt gemaakt, heb je die toch niet meer nodig?

Op zich is het niet nuttig om voor MySQL een class te maken, die zijn er al. PHP Heeft MySQLi en PDO, en zo'n beetje iedereen die een beetje PHP programmeert heeft er zelf wel eens een geschreven. Zelfs jij. Het is dus niet de meest nuttige class om te schrijven, het is wel heel handig om het te leren, want er zijn zat voorbeelden.

Welke kant ga je op? Ga je één grote class maken die query() functie heeft, en een fetch() functie, waarmee je dus eigenlijk gewoon de mysql_* functies 1 op 1 in je class zet. Ga je hem uitbreiden met handige functies die queries genereren zoals select() en count()? Of ga je meer PDO's kant op waarbij prepare() en query() een PDOStatement object teruggeven waaruit je dan de results kan ophalen? Of ga je nog veel verder en ga je tabellen en velden en conditions en statements allemaal als classes modeleren zodat je je query volledig kan programmeren en kan genereren met PHP, waardoor je voor een simpele select-query plotseling 6 regels nodig hebt?
 
- Raoul -
Redacteur

- Raoul -

09/10/2010 09:10:44
Quote Anchor link
Waarom zou je een class aanmaken om te connecten met MySQL,
er bestaat hier al een functie voor, dus ik vind dit overbodig.
 
Karl Karl

Karl Karl

09/10/2010 09:17:16
Quote Anchor link
ILoran punt NL op 08/10/2010 23:19:27:
@Karl,

Waar slaat jouw reactie op?
Heel toevallig stond het zo in mijn schoolboek.....


Helaas wel!

"- GA ZELF DOOD NEER VALLEN!"
DOE NORMAAL!


Inmiddels zou jij al twee dingen moeten weten. Namelijk dat schoolboeken het bijna nooit bij het juiste end hebben en dat exit / die doen omdat er een foutjes was ontzettend vies is.
Jij zegt nu in principe hetzelfde als ik tegen jou zeg. Denk eens na. Dat is toch helemaal niet de bedoeling?
Ook moet juist goed oppassen met schoolboeken, die bevatte vaak verkeerde / achterhaalde / slechte informatie.

Jelmer rrrr op 09/10/2010 00:24:33:
Youri van Mill op 08/10/2010 14:39:33:
Ik ben nieuw in OOP.

Doe ik het zo goed, op deze manier?

(...)
Welke kant ga je op? Ga je één grote class maken die query() functie heeft, en een fetch() functie, waarmee je dus eigenlijk gewoon de mysql_* functies 1 op 1 in je class zet. Ga je hem uitbreiden met handige functies die queries genereren zoals select() en count()? Of ga je meer PDO's kant op waarbij prepare() en query() een PDOStatement object teruggeven waaruit je dan de results kan ophalen? Of ga je nog veel verder en ga je tabellen en velden en conditions en statements allemaal als classes modeleren zodat je je query volledig kan programmeren en kan genereren met PHP, waardoor je voor een simpele select-query plotseling 6 regels nodig hebt?

Of ga je nog verder en maak je er een ORM van zoals doctrine?

Internet Verslaafde op 09/10/2010 09:10:44:
Waarom zou je een class aanmaken om te connecten met MySQL,
er bestaat hier al een functie voor, dus ik vind dit overbodig.

Reasons for using classes.
 
Niels Kieviet
Beheerder

Niels Kieviet

09/10/2010 14:53:12
Quote Anchor link
Kijk hier eens naar:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php

/**
 * Interface.php. Dit bestand bevat alle interfaces die bij de Database package horen.
 * De Database package bevat alle klassen die rechtstreeks met de Database communiceren
 * en gebruik maken van Database specifieke functies uit PHP.
 * Dit bestand bevat alle interfaces die te maken hebben met de Database package.
 * De interfaces dwingen af hoe een Database en een DatabaseResult eruit moet komen te zien.
 *
 * @package Database
 * @throws DatabaseException
 * @author Niels Kieviet <Nielskiev@hotmail.com>
 * @version $Revision v.100$
 * @copyright Copyright (c) 2010, Niels Kieviet
 */


require_once dirname( __FILE__ ) . '/exception.php';

/**
 * De Database interface. Deze interface wordt gebruikt om aan te geven hoe een Database eruit moet zien.
 * De Database kan verbinding maken en er kunnen queries op uitgevoerd worden. Het resultaat van een query
 * wordt verwerkt door het DatabaseResult. Alle methoden uit deze interface maken het mogelijk om op een
 * generieke manier acties uit te voeren op de database.
 */

interface Database
{
    /**
     * Methode die verbinding met de database maakt. Gebruik makend van de meegegeven login gegevens
     *
     * @param String $host De host waar de database gehost staat
     * @param String $username De gebruikersnaam om in te loggen op de database
     * @param String $password Het wachtwoord om in te loggen op de database
     * @param String $database De naam van de database waarmee verbinding gemaakt moet worden
     * @return Void
     */

    public function connect( $host, $username, $password, $database );
    
    /**
     * Methode om de opgegeven query uit te voeren op de database
     *
     * @param String $query De query die uitgevoerd moet worden op de database
     * @throws DatabaseException Een opgetreden foutmelding wordt door de DatabaseException opgevangen.
     * @return DatabaseResult Het resultaat van de query
     */

    public function query( $query );
}


/**
 * De DatabaseResult interface. Deze interface wordt gebruikt om een resultaat van een query op de Database
 * te beschrijven.
 *
 * Op het moment dat een query uitgevoerd wordt, komt er een DatabaseResult terug. De DatabaseResult bevat
 * het resultaat van de query en geeft de mogelijkheid om dit resultaat op diversen manieren op te vragen.
 */

interface DatabaseResult
{
    /**
     * Methode om een enkele regel uit het resultaat op te vragen in de vorm van een array met key => value
     * paren. Elke key correspondeert met een geselecteerd veld uit de database.
     *
     * @return Array Een enkele regel uit het resultaat in vorm van een array met key => value paren
     */

    public function fetch_assoc( );
    
    /**
     * Methode om het hele resultaat in één array op te vragen. De array is een lijst van alle geselecteerde
     * regels opgevraagd met de fetch_assoc methode
     *
     * @return Array Een lijst met alle geselecteerde regels
     */

    public function fetch_all( );
    
    /**
     * Methode om het aantal regels uit het resultaat op te vragen.
     *
     * @return Integer Het aantal regels waaruit het resultaat bestaat
     */

    public function rows( );
}

?>


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
58
59
60
61
62
63
64
65
66
67
<?php

/**
 * mysql.database.php. Dit bestand bevat alle klassen die specifiek gericht zijn in het
 * communiceren met een MySQL database.
 *
 * @package Database
 * @throws DatabaseException
 * @author Niels Kieviet <Nielskiev@hotmail.com>
 * @version $Revision v.100$
 * @copyright Copyright (c) 2010, Niels Kieviet
 */


require_once dirname( __FILE__ ) . '/interface.php';
require_once dirname( __FILE__ ) . '/exception.php';
require_once dirname( __FILE__ ) . '/mysql.result.php';

/**
 * De MySQL klasse. De MySQL is een implementatie van de Database interface specifiek gericht
 * om te communiceren met een MySQL database
 */

class MySQL implements Database
{
    /**
     * In deze variabele wordt de database connectie opgeslagen
     *
     * @var MySQLObject
     */
    
    private $connection;
    
    /**
     * Methode die verbinding met de database maakt. Gebruik makend van de meegegeven login gegevens
     *
     * @param String $host De host waar de database gehost staat
     * @param String $username De gebruikersnaam om in te loggen op de database
     * @param String $password Het wachtwoord om in te loggen op de database
     * @param String $database De naam van de database waarmee verbinding gemaakt moet worden
     * @return Void
     */

    public function connect( $host, $username, $password, $database )
    {

        if( !$this->connection = mysql_connect( $host, $username, $password ) ) {
            throw new DatabaseException( 'Kon geen verbinding met de database tot stand worden gebracht' );            
        }

        if( !mysql_select_db( $database, $this->connection ) ) {
            throw new DatabaseException( mysql_error( ) );
        }
    }

    
    /**
     * Methode om de opgegeven query uit te voeren op de database
     *
     * @param String $query De query die uitgevoerd moet worden op de database
     * @throws DatabaseException Een opgetreden foutmelding wordt door de DatabaseException opgevangen.
     * @return DatabaseResult Het resultaat van de query
     */

    public function query( $query )
    {

        $result = mysql_query( $query, $this->connection );
        
        if( !$result ) {
            throw new DatabaseException( mysql_error( ) );
        }

        return new MySQLResult( $result );
    }
}

?>


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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php

/**
 * mysql.result.php. Dit bestand bevat alle klassen die specifiek te maken hebben
 * met het resultaatset van een MySQL database.
 *
 * @package Database
 * @throws DatabaseException
 * @author Niels Kieviet <Nielskiev@hotmail.com>
 * @version $Revision v.100$
 * @copyright Copyright (c) 2010, Niels Kieviet
 */

/**
 * De MySQLResult klasse is een implementatie van de DatabaseResult interface
 * die specfieke gericht is op het communiceren met een MySQL database.
 * De klasse vangt het resultaat op wat verkegen is van de MySQL database klasse.
 */

class MySQLResult implements DatabaseResult
{
    /**
     * In deze variabele wordt het resultaat opgeslagen
     *
     * @var MySQLResultObject
     */

    private $result;
    
    /**
     * De constructor maakt een nieuwe MySQLResult gebruik makend van de result
     * handler verkregen bij het uitvoeren van een query.
     *
     * @param Handler $result De result handler verkregen bij het uitvoeren van een query
     * @return Void
     */

    public function __construct( $result )
    {

        $this->result = $result;
    }

    
    /**
     * Methode om een enkele regel uit het resultaat op te vragen in de vorm van een array met key => value
     * paren. Elke key correspondeert met een geselecteerd veld uit de database.
     *
     * @return Array Een enkele regel uit het resultaat in vorm van een array met key => value paren
     */

    public function fetch_assoc( )
    {

        return mysql_fetch_assoc( $this->result );
    }

    
    /**
     * Methode om het hele resultaat in één array op te vragen. De array is een lijst van alle geselecteerde
     * regels opgevraagd met de fetch_assoc methode
     *
     * @return Array Een lijst met alle geselecteerde regels
     */

    public function fetch_all( )
    {

        $result = array( );
        while( $row = $this->fetch_assoc( ) ) {
            $result[] = $row;
        }

        return $result;
    }

    
    /**
     * Methode om het aantal regels uit het resultaat op te vragen.
     *
     * @return Integer Het aantal regels waaruit het resultaat bestaat
     */

    public function rows( )
    {

        return mysql_num_rows( $this->result );
    }
}

?>


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
<?php
 
/**
 * Exception.php. Dit bestand bevat alle exception klassen de bij de Database package horen.
 * De Database package bevat alle klassen die rechtstreeks met de Database communiceren
 * en gebruik maken van Database specifieke functies uit PHP.
 *
 * @package Database
 * @subpackage Exception
 * @author Niels Kieviet <Nielskiev@hotmail.com>
 * @version $Revision v.100$
 * @copyright Copyright (c) 2010, Niels Kieviet
 */

/**
 * De DatabaseException klasse. De DatabaseException klasse is een extentie van de standaart
 * Exception klasse en wordt gebruikt om fouten die optreden tijdens het gebruik van de database
 * naar voren te brengen.
 *
 * De DatabaseException klasse is gemaakt om het mogelijk te maken om in een try catch blok
 * het verschil te maken tussen een normale Exception en een DatabaseException
 */

class DatabaseException extends Exception { }
?>
 



Overzicht Reageren

Get Adobe Flash player