Einfache MySQLi Datenbankabfrage

MySQLi soll eine verbesserte Version von MySQL darstellen, dafür auch das i am Ende, das für improved steht und verbessert bedeutet.
Laut dem Hersteller hat sich die Geschwindigkeit erhöht und mit der Hilfe von Prepared Statements ist die Sicherheit im Bezug auf SQL Injections gestiegen. Weiter ist ein wichtiger Aspekt, dass man MySQLi nicht nur prozedural verwenden kann, sondern darauf ausgelegt ist sie objektorientiert zu verweden. MySQLi bietet auch die Möglichkeit von Multiquerys.

In diesem Artikel schauen wir uns eine Datenbankverbindung mit einer einfachen Abfrage an. Dabei nehmen wir die Besonderheiten genau unter die Lupe.

Was hat sich geändert?

Wer bereits mit den Funktionen von MySQL vertraut ist, wird sich schnell in die prozedurale Schreibweise hineinfinden.

MySQL MySQLi MySQLi OOP
mysql_connect() mysqli_connect() new mysqli()
mysql_query() mysqli_query() $stmt = $mysqli->query()
mysql_affected_rows() mysqli_affected_rows() $stmt->affected_rows
mysql_select_db() mysqli_select_db() Kann als Parameter bei der
Datenbankverbindung angegeben
werden.

Wie man sieht, hat sich in der prozeduralen Schreibweise bis auf das i nicht geändert. Bis auf den Funktionsumfang vielleicht. Bei der objektorientierten Schreibweise, wird es schon etwas anspruchsvoller für Umsteiger. Sollte man aber bereits Erfahrungen in der OOP haben, wird es keine große Hürde sein. Aber auch für Neulinge erschließt sich recht schnell, wie man damit umzugehen hat.
Zunächst schauen wir uns die das Ganze prozedural an und dann objektorientiert.

Prozedural Datenbankverbindung

$mysqli = mysqli_connect("localhost", "Datenbankbenutzer", "Datenbankpasswort", "Datenbankname");


if(mysqli_connect_errno())
{
  printf("Datenbankfehler:", mysqli_connect_error());
  exit;
}

Zunächst erstellen wir eine Verbindung zu unserer Datenbank und prüfen dann, ob eine Fehlermeldung zurück gegeben wird. Dies tuen wir mit der Funktion mysqli_connect_errno(). Sollte ein Fehler erzeugt werden, gibt die Funktion einen Fehlercode zurück.

Objektorientiert Datenbankverbindung

$mysqli = new mysqli("localhost", "Datenbankbenutzer", "Datenbankpasswort", "Datenbankname");


if($mysqli->connect_errno)
{
  printf("Datenbankfehler:", mysqli_connect_error());
  exit;
}

Mit new erzeugen wir ein neues Objekt oder anders gesagt, wir erstellen eine Instanz der Klasse mysqli.


Nachdem wir nun eine erfolgreiche Verbindung zu unserer Datenbank herstellen konnten, möchten wir nun eine Abfrage machen. Für eine einfache Abfrage, habe ich eine kleine Tabelle erstellt, die wie folgt aussieht.

CREATE TABLE benutzer(
id INT(4) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
vorname VARCHAR(15),
nachname VARCHAR(30),
age INT(2))

Im zweiten Schritt fügen wir direkt ein paar Datensätze hinzu.

INSERT INTO benutzer (vorname, nachname, age) VALUES
("Peter", "Müller", 29),
("Donald", "Duck", 32),
("Sarah", "Schmidt", 22)

So, dann hätten wir das auch fertig, jetzt können wir zu dem Teil kommen, worum es hier eigentlich geht. Die Abfrage der Datenbank mit Hilfe von MySQLi.
Wie oben werde ich beide Wege zeigen.

Prozedurale MySQLi SELECT Abfrage

$ergebnis = mysqli_query($mysqli, 'SELECT * FROM benutzer WHERE vorname = "Peter"');


while($row = mysqli_fetch_assoc($ergebnis))
{
 echo $row[‘vorname’].' '.$row[‘nachname’];
}
//Ausgabe: Peter Müller

Anders als bei einer normalen MySQL Abfrage, wird bei dem mysqli_query die Verbindung mit angegeben. Danach komt der SQL String für die SELECT Anweisung. Mit der while-Schleife lassen wir uns das Ergebnis ausgeben. Hier nutzen wir die Funktion mysqli_fetch_assoc, die ein assoziatives Array zurück liefert, auf das wir über die Variable $row zugreifen können.

Objektorientierte MySQLi SELECT Abfrage

$ergebnis = $mysqli->query('SELECT * FROM benutzer WHERE vorname = "Peter"');


while($row = $ergebnis->fetch_assoc())
{
 echo $row[‘vorname’].' '.$row[‘nachname’];
}
//Ausgabe: Peter Müller

In den beiden Schreibweisen finden sich kleine Unterschiede, die aber noch nicht so gravierend sind. Die große Veränderung zwischen MySQL und MySQLi ist ersichtlich, wenn man Prepared Statements verwendet. Die beschreibe ich in einem anderen Artikel, den ihr unter MySQLi Prepared Statements finden könnt.

Impressum | 2014 © Wissen Lernen - Webpixelpromoter.com