MySQLi - Een nieuwe manier van interactie tussen PHP en MySQL

  1. Inleiding
  2. Proceduraal vs. Object georienteerd
  3. Object georienteerde interface van mysqli
  4. Meerdere queries tegelijk uitvoeren
  5. Prepared statements
  6. Transacties met mysqli: commit() en rollback()
  7. Uitbreiden van de mysqli klasse
  8. Slotwoord en referenties
  9. Reacties op deze tutorial

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
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
// 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: kees@example.com
?>

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.

Voorbeeld19: Foutafhandeling met de Exception klasse
Code
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
<?php 
// 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.

Vorige Volgende