MySQLi - Besonderheiten
1. OOP und prozdural
Leider ist es eine ganz große Schwäche von MySQLi, dass man beides wild miteinander kombinieren kann. Das liegt daran, dass immer ein Objekt zurückgegeben wird, was diesen Mischmasch überhaupt erst möglich macht.
2. Beispiel 1
$mysqli = mysqli_connect('host', 'user', 'db', 'pw');
$query = 'SELECT bla FROM blubb';
$result = $mysqli->query($query);
while ($row = mysqli_fetch_assoc($result)) {
print_r($row);
}
Vorgehensweise
- Prozeduraler Verbindungsaufbau mit
mysqli_connect
- Objektorientierte Abfrage mit
-> query
- Prozedurales Sammeln der Daten mit
mysqli_fetch_assoc
3. Beispiel 2
$mysqli = new mysqli('host', 'user', 'db', 'pw');
$query = 'SELECT bla FROM blubb';
$stmt = mysqli_prepare ($mysqli,$query);
$id = 500;
$stmt -> bind_param('i', $id);
mysqli_stmt_execute($stmt);
$result = $stmt -> get_result();
while ($row = mysqli_fetch_assoc($result)) {
print_r($row);
}
Hier ist die Vorgehensweise noch extremer. Erst objektorientiert, dann prozedural. Und das immer schön abwechselnd.
- Objektorientierter Verbindungsaufbau mit
new mysqli
- Prozedurales Vorbereiten eines Prepared Statements mit
mysqli_prepare
- Objektorientiertes Setzen der Parameter mit
-> bind_param
- Prozedurales Ausführen des Prepared Statements mit
mysqli_stmt_execute
- Objektorientiertes Holen der Referenz mit
-> get_result
- Prozedurales Sammeln der Daten mit
mysqli_fetch_assoc
4. Fazit
Schon alleine wegen dieses Tohuwabohus ist meiner Meinung nach MySQLi nur eine Zwischenlösung. Denn so ein Kuddelmuddel sollte es eigentlich nicht geben. Das haben sich wohl auch die Entwickler von PHP gedacht und sind mit der PDO-Erweiterung einen konsequenten Schritt weiter gegangen. Dazu komme ich aber in einem meiner nächsten Tutorials.
Ausnahmen
Wie ich schon vorher sagte, kann man connect_error
erst ab Version 5.2.9 zweifelsfrei
einsetzen. In diesem speziellen Fall kann man also die objektorientierte und prozedurale Programmierung ausnahmsweise mal mischen, wenn
man über keine aktuelle PHP-Version verfügt.