PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Jobs
  • 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
  • Casinopilot24.com
  • Casino utan Spelpaus
  • Casino utan Spelpaus med Trustly
  • Neueonline-Casinos.com
  • CasinoHEX.at
  • Decasinos.de
  • Privatkredit247.com
  • CasinoAdvisers.com
  • parhaatuudetkasinot.com
  • Online Casino Spielautomaten

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. netcup Ø 5 Min.
  3. Linevast Ø 7 Min.
  4. Mittwald Ø 13 Min.
  5. manitu Ø 14 Min.
  6. dogado Ø 14 Min.
  7. All-Inkl.com Ø 20 Min.
  8. Host Europe Ø 21 Min.
  9. bplaced Ø 22 Min.
  10. Strato Ø 25 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2021

Um dich beim Lernen von PHP und MySQL zu unterstützen verwenden wir Cookies. OK Weitere Infos
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Notwendige
immer aktiv

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Nicht notwendige

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.