PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Crashkurs MySQLi

15. Juli 2019
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. Crashkurs MySQLi

Die MySQL Improved Extension (MySQLi) ermöglicht es ab PHP 5 auf MySQL-Datenbanken zuzugreifen. Neben MySQLi existiert in PHP noch die PHP Data Objects (PDO). Aufgrund der größeren Flexibilität empfiehlt sich unserer Meinung nach die Verwendung von PDO. Eine umfangreiche Einführung in MySQL und PDO erhaltet ihr in unserem MySQL Tutorial. Einen kompakten Crashkurs zu PDO existiert im Artikel Crashkurs PDO.

Inhaltsverzeichnis

  • 1 Verbindung aufbauen
  • 2 SQL Query an Datenbank senden
  • 3 Prepared Statements
  • 4 Datensätze abrufen
  • 5 Anzahl der Zeilen
  • 6 Eingefügte ID
  • 7 MySQL Fehlermeldung

Verbindung aufbauen

Eine Verbindung zur Datenbank kann wie folgt aufgebaut werden:

1
2
3
4
5
6
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
?>

SQL Query an Datenbank senden

Zum Senden von Queries an die Datenbank wird die Methode query($sql) verwendet:

1
2
3
4
5
6
7
8
9
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
 
$sql = "UPDATE tabelle SET spalte = 'Wert' WHERE id = 1";
$mysqli->query($sql);
?>

 

Prepared Statements

Prepared Statements sind MySQLi sehr umständlich umzusetzen, erheblich umständlicher als in PDO. Ein Beispiel sieht wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$mysqli = new mysqli("localhost", "user", "Password", "database");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
$sql = "UPDATE user SET email = ?, passwort = ? WHERE id = ?";
$statement = $mysqli->prepare($sql);
$statement->bind_param('ssi', $email, $passwort, $id);
 
//Variablen Werte zuweisen
$id= 1;
$email = "[email protected]";
$passwort = "neues passwort";
$statement->execute();
?>

Mittels bind_param() Werten die Parameter im SQL-Query mit den Variablen verbunden. Das erste Argument von bind_param(), im obigen Beispiel mit dem Wert ssi sind die Typen der Parameter. ssi gibt an, dass wir drei Parameter im Query haben, den ersten mit dem Typ string, den zweiten vom Typ string und den dritten vom Typ integer. Für Fließkommazahlen existiert noch der Wert d.

Nachdem die Variablen mit den Parametern verbunden wurden, wird diesen der entsprechende Wert zugewiesen und mittels $statement->execute() wird der Prepared Statement an die Datenbank gesendet.

Im Vergleich zu PDO ist dies doch deutlich komplizierter.

Datensätze abrufen

Zum Abrufen und Ausgeben von Datensätzen existieren die Methoden $result->fetch_assoc() und $result->fetch_object()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
$id = 100;
$sql = "SELECT * FROM tabelle WHERE id < ?";
$statement = $mysqli->prepare($sql);
$statement->bind_param('i', $id);
$statement->execute();
 
$result = $statement->get_result();
 
 
while($row = $result->fetch_object()) {
  echo $row->spaltenname;
}
 
//Alternativ mit fetch_assoc():
while($row = $result->fetch_assoc()) {
  echo $row['spaltenname'];
}
 
?>

Anzahl der Zeilen

Um die Anzahl der betroffenen Zeilen von UPDATE, DELETE oder INSERT-Anweisungen zu erhalten, existiert das Feld $statement->affected_rows .

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$mysqli = new mysqli("localhost", "root", "", "php-einfach");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
 
//Prepared statement mit INSERT/DELETE/UPDATE-Anweisung für $statement
 
$statement->execute();
$count = $statement->affected_rows;
echo $count;
?>

Um die Anzahl der Zeilen einer SELECT-Anweisung zu erhalten, existiert das Feld $result->num_rows

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$mysqli = new mysqli("localhost", "root", "", "php-einfach");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
 
//Prepared statement mit SELECT-Anweisung für $statement
 
$statement->execute();
$result = $statement->get_result();
$count = $result->num_rows;
echo $count;
?>

 

Eingefügte ID

Um die vergebene ID für ein Auto Increment-Feld zu erhalten, existiert das Feld $statement->insert_id:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
 
$sql = "INSERT INTO user (email, passwort) VALUES (?,?)";
$statement = $mysqli->prepare($sql);
$statement->bind_param('ss', $email, $pw);
 
$email = "[email protected]";
$pw = "testPW";
$statement->execute();
$new_id = $statement->insert_id;
echo $new_id;
?>

 

MySQL Fehlermeldung

Sollte ein Query fehlschlagen, so erhalten wir die Fehlermeldung in dem Feld $statement->error:

1
2
3
4
5
6
<?php
//Prepared statement in $statement
if(!$statement->execute()) {
  echo "Query fehlgeschlagen: ".$statement->error;
}
?>

 

Autor: Nils Reimers
Zurück: Crashkurs MySQL
Weiter: Crashkurs PDO

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. netcup Ø 0 Min.
  2. webgo Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 4 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 10 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}