Mysql Database Class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin Peters

Robin Peters

13/07/2010 19:55:19
Quote Anchor link
Hallo,

Ik ben sinds kort begonnen met OOP en heb een mysql database class gemaakt, Nu zou ik graag willen weten of ik de goede kant op ga en wat ik nog zou kunnen verbeteren kwa coderen en beveiligen.

Oop is toch wat moeilijker dan ik had gedacht. :P

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

//Database class
class db
{
    
    private $hostname;
    private $username;
    private $password;
    private $database;
    private $connect;
    private $select_db;
    
    public function __construct()
    {

        $this->hostname = 'xxxxx';
        $this->username = 'xxxxx';
        $this->password = 'xxxxx';
        $this->database = 'xxxxx';
        
    }

    
    public function open_connection()
    {

        try
        {
            $this->connect = mysql_connect($this->hostname,$this->username,$this->password);
            $this->select_db = mysql_select_db($this->database);
        }

        catch(exception $e)
        {

            return $e;
        }
    }

    
    public function close_connection()
    {

        try
        {
            mysql_close($this->connect);
        }

        catch(exeption $e)
        {

            return $e;
        }
    }

    
    public function query($sql)
    {

        try
        {
            $this->open_connection();
            $sql = mysql_query($sql);
        }

        catch(exception $e)
        {

            return $e;
        }

        $this->close_connection();
        return $sql;
    }
}


?>
 
PHP hulp

PHP hulp

19/04/2024 02:33:28
 
Niels K

Niels K

13/07/2010 20:05:54
Quote Anchor link
Hoi Robin Peters

Leuk dat je bezig bent met het Object Georienteerd Programmeren. Dat dit moeilijk is zal ik niet ontkennen. Het is een heel andere denkwijze dan het ´normale´ programmeren. Opzich ben je goed op weg maar ik vraag me af of in elke method een try catch handig is.

Bij het maken van een applicatie is het uitdenken van deze een belangrijke stap. Ook vooruit denken speelt hierin een grote rol.

Je kunt nu maar 1 connectie met een bepaald soort database maken. Als je later wilt overgaan op een ander soort database moet je de code zodanig veranderen dat je beter een nieuwe kunt maken. Het is goed om hiervoor een voorziening voor te treffen, en een module te maken waarin het niet uitmaakt welke database type je gebruikt. Bekijk het script hieronder eens..

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php

/**
 * @package database
 *
 * @author Niels Kieviet <[email protected]>
 * @version $Revision v1.00$
 * @copyright Copyright (c) 2010, Niels Kieviet
 */

/*
 * Database interface
 */

interface database
{
    /**
     * Make connection with the database
     *    
     * @param string $dbHost
     * @param string $dbUser
     * @param string $dbPass
     * @param string $dbName
     */

    public function connect( $db_host, $db_user, $db_pass, $db_name );
    
    /**
     * Run a Query
     */

    public function query( $query );
}


/**
 * DatabaseResult interface
 */

interface databaseResult
{
    /**
     * @return array
     */

    public function fetch_assoc();
    
    /**
     * @return array
     */

    public function fetch_all();
    
    /**
     * @return int
     */

    public function rows();
    
    /**
     * @return int
     */

    public function last_id();
}


/**
 * Database exception class.
 */

class databaseException extends Exception
{
}


/**
 * MySQL class.
 */

class MySQL implements database
{

    /**
     * @var array
     */

    private $connection;
    
    /**
     * Make connection with a MySQL database
     */

    public function connect( $db_host, $db_user, $db_pass, $db_name )
    {

        if( !$this->connection = mysql_connect( $db_host, $db_user, $db_pass, $db_name ) ) {
            throw new databaseException( 'Connection with MySQL database failed' );
        }

        if( !mysql_select_db( $db_name, $this->connection ) ) {
            throw new databaseException( 'Select database failed' );
        }
    }

    
    /**
     * Run Query
     *
     * @return MySQLResult
     */

    public function query( $query )
    {

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

        return new MySQLResult( $result );
    }
}


/**
 * MySQLResult class.
 */

class MySQLResult implements databaseResult
{
    /**
     * @var array
     */

    private $result;
    
    /**
     * Constructor.
     *
     * @param handler $result
     */

    public function __construct( $result )
    {

        $this->$result = $result;
    }

    
    /**
     * @return array
     */

    public function fetch_assoc()
    {

        return mysql_fetch_assoc( $this->result );
    }

    
    /**
     * @return array
     */

    public function fetch_all()
    {

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

        return $result;
    }

    
    /**
     * @return int
     */

    public function rows()
    {

        return mysql_num_rows( $this->result );
    }

    
    /**
     * @return int
     */

    public function last_id()
    {

        return mysql_insert_id( );
    }
}

?>


Je zou ook eens naar PDO kunnen kijken. Dan ben je gelijk van het probleem af.

PS: Er kunnen fouten in zitten ik heb hem niet getest..
Gewijzigd op 13/07/2010 20:07:20 door Niels K
 
Chris -

Chris -

13/07/2010 20:07:46
Quote Anchor link
Waarom MySQL gebruiken en niet gewoon mysqli? (Als je dan toch OOP gaat programmeren)
 
Niels K

Niels K

13/07/2010 20:09:18
Quote Anchor link
Ja inderdaad Chris, al zou ik eerder voor PDO gaan.
 
Robin Peters

Robin Peters

13/07/2010 20:37:48
Quote Anchor link
Ten eerste bedankt voor reacties!

Ik denk dat ik inderdaad verder ga met PDO, en dan op de onderstaande manier (Bron: PHPhulp)

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
<?php
try
{
    $db = new PDO('mysql:host=localhost;dbname=test','user','password');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $sql = "SELECT naam FROM bestaat_niet";
    $results = $db->query($sql);
    
    foreach($results as $row)
    {

        echo $row['naam'].'<br>';
    }
}

catch(PDOException $e)
{

    echo '<pre>';
    echo 'Regelnummer: '.$e->getLine().'<br>';
    echo 'Bestand: '.$e->getFile().'<br>';
    echo 'Foutmelding: '.$e->getMessage().'<br>';
    echo '</pre>';
}

?>
 
Hipska BE

Hipska BE

13/07/2010 22:43:50
Quote Anchor link
Op welke manier zou je het anders doen dan?

Dit is gewoon DE manier om PDO te gebruiken...
 
Jurgen Meijer

Jurgen Meijer

14/07/2010 17:16:58
Quote Anchor link
Wat ik vaak doe is een singleton class bouwen en daarin gewoon een instantie van PDO teruggeven.


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

//Zo doe ik dat dan in mijn classes

class test{

private $db;

public function __construct(){
//doe iets;

$this->db = DB::getInstance('PDO');

$stmt = $this->db->prepare('...');
}



//meer functies.
}

?>
Gewijzigd op 14/07/2010 17:17:53 door Jurgen Meijer
 
Niels K

Niels K

14/07/2010 18:05:28
Quote Anchor link
@Jurgen,

Het gebruikt van singletons wordt afgeraden omdat dit tegen de OOP regels is..
 
Hipska BE

Hipska BE

15/07/2010 20:20:50
Quote Anchor link
Oja? Vertel eens, waarom is dat niet toegestaan.

Mijn idee: Zonder OOP en dus objecten en classes kan je ook geen singletons hebben, dus singletons is ook een onderdeel van objecten e.d.
 
Niels K

Niels K

15/07/2010 20:44:57
Quote Anchor link
Rustig maar hoor:)

Ik zeg niet dat het heel fout is maar het heeft grote nadelen.. Lees dit artikel maar eens

http://wiki.phpfreakz.nl/Singleton
 



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.