Uitbreiden van de mysqli klasse
Dit hoofdstuk gaat een stuk dieper in op de OOP functionaliteit van de mysqli extensie. Voor dit hoofdstuk is in enige kennis van object georienteerd programmeren een vereiste.
De functionaliteit van de object georienteerde (OO) interface wordt benaderd via de mysqli, mysqli_stmt en mysqli_result klasses. De mysqli klasse representeert een database verbinding, de mysqli_stmt klasse een prepared statement en de mysqli_result klasse een resultaat set van een query.
Extenden van de mysqli klasse
Het leuke is nu dat je deze klasses gewoon kunt extenden met een door jezelf geschreven klasse. Dit geldt voor alle drie de klassen maar in deze tutorial zal ik me beperken tot het extenden van de mysqli klasse.
Voorbeeld 18: Extenden van de mysqli klasse
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Een child van de mysqli klasse aanmaken.
class extended_mysqli extends mysqli
{
function query_and_fetch($query)
{
$result = $this->query($query);
return $result->fetch_row();
}
}
$mysqli = new extended_mysqli('host', 'user', 'pass', 'database');
$sql = "SELECT email FROM tabel WHERE naam = 'Kees'";
$row = $mysqli->query_and_fetch($sql);
echo $row['email']; // Output: [email protected]
?>
Hier hebben we onze eigenlijk klasse extended_mysqli geschreven. Deze klasse is een child van de mysqli klasse, we hebben dus beschikking over alle eigenschappen en methodes die de mysqli klasse ook heeft. In onze klasse hebben we een nieuwe methode genaamd query_and_fetch() aangemaakt die twee reeds bestaande methoden combineert.
Voor het opzetten van een nieuwe verbinding gebruiken we nu natuurlijk onze eigen klasse. Vervolgens voeren we een query uit met de nieuwe methode en het resultaat is direct duidelijk.
Dit is maar een heel eenvoudig voorbeeldje en alle foutafhandeling ontbreekt. Natuurlijk moet deze nog wel toegevoegd worden!
Foutafhandeling met de Exeption klasse
In plaats van in onze scripts telkens te moeten controleren of er een fout opgetreden is bij het uitvoeren van een query, kunnen we dit ook op een elegantere manier aanpakken. Hierbij maken we gebruik van de Exeption klasse.
Voorbeeld 19: Foutafhandeling met de Exception klasse
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
// Een child van de mysqli klaasse aanmaken.
class extended_mysqli extends mysqli
{
function query($query)
{
$result = parent::query($query)
if($this->error)
{
throw new Exception(mysqli_error($this), mysqli_errno($this));
}
return $result;
}
}
$mysqli = new extended_mysqli('host', 'user', 'pass', 'database');
$sql = "SELECT email FROM tabel WHERE naam = 'Kees'";
try {
$result = $mysqli->query($sql);
var_dump($result->fetch_assoc());
}
catch(Exeption $e)
{
var_dump($e->getTrace());
}
?>
Aangezien we de Exception klasse willen gebruiken om fouten bij het uitvoeren van een query() af te vangen, zullen we een eigen query() methode in onze klasse op moeten nemen. Binnen deze query() methode kunnen we de foutafhandeling dan bepalen.
Met parent::query() roepen we de query() methode uit de mysqli klasse aan. Vervolgens controleren we of $this->error bestaat en er dus een fout opgetreden is. Zo ja, dan gooien we er een Exception tegenaan. In de rest van het script maken we gebruik van de try/catch combinatie om deze exceptions af te vangen.
Voor meer informatie en enkele andere voorbeelden over het uitbreiden van de mysqli klasse kijk je eens naar deze tutorial op zend.com.
Inhoudsopgave
- Inleiding
- Transacties met mysqli: commit() en rollback()
- Proceduraal vs. Object georienteerd
- Uitbreiden van de mysqli klasse
- Object georienteerde interface van mysqli
- Slotwoord en referenties
- Meerdere queries tegelijk uitvoeren
- Prepared statements