Mysql Database Class
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)
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
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;
}
}
?>
//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;
}
}
?>
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)
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
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( );
}
}
?>
/**
* @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
mysqli? (Als je dan toch OOP gaat programmeren)
Waarom MySQL gebruiken en niet gewoon Ja inderdaad Chris, al zou ik eerder voor PDO gaan.
Ik denk dat ik inderdaad verder ga met PDO, en dan op de onderstaande manier (Bron: PHPhulp)
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
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>';
}
?>
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>';
}
?>
Dit is gewoon DE manier om PDO te gebruiken...
Het gebruikt van singletons wordt afgeraden omdat dit tegen de OOP regels is..
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.
Ik zeg niet dat het heel fout is maar het heeft grote nadelen.. Lees dit artikel maar eens
http://wiki.phpfreakz.nl/Singleton