decocode decocode deco    

MySQL-Datensätze verwalten #

Übersicht
Datensatz erzeugen
Daten auswählen und anzeigen
Auswahl begrenzen
Liste sortieren
Bestimmte Datensätze auswählen
Datensatz bearbeiten
Kopie eines Datensatzes erzeugen
Datensatz löschen

Auf dieser Seite wird beschrieben, wie man einen neuen Datensatz anlegt, bearbeitet, kopiert und gegebenenfalls wieder löscht. Außerdem wird beschrieben, wie verschiedene Arten von Datenbankabfragen durchgeführt werden.

Datensatz erzeugen #

► MySQL-Dokumentation: INSERT
► PHP-Dokumentation: mysqli_insert_id()

Eine Datenbanktabelle kann über ein Formular einer Weboberfläche mit Daten befüllt werden. Ist eine Anzahl von Datensätzen bereits bei der Erzeugung der Datenbanktabelle bekannt, so können diese beispielsweise auch aus einem Array gelesen und in die Tabelle eingetragen werden:

Quelltext auswählen
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
29
30
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  $dbtname = "adressen";
  $personen = array(
    array("Hans", "Meier", "Hafenstraße", 34, 10001, "Musterstadt", "21.04.1987", "764534", ""),
    array("Monika", "Müller", "Am Acker", 3, 10002, "Musterdorf", "03.11.1956", "408564", ""),
    array("Paul", "Schmidt", "Bahnhofstraße", 129, 10001, "Musterstadt", "17.09.1972", "2856321", ""),
    array("Paula", "Lehmann", "Dorfstraße", 17, 10002, "Musterdorf", "11.06.1999", "9953421", "")
  );
  foreach($personen as $person) {
    $sql = "INSERT INTO `".$dbtname."` (
              `vorname`, `nachname`, `strasse`, `hausnummer`, `plz`, `ort`, `geburtsdatum`, `telefon`, `kommentar`
            ) VALUES (
              '".$person[0]."',
              '".$person[1]."',
              '".$person[2]."',
               ".$person[3].",
               ".$person[4].",
              '".$person[5]."',
              '".$person[6]."',
              '".$person[7]."',
              '".$person[8]."'
            )";
    if (mysqli_query($my, $sql)) echo "Datensatz #".mysqli_insert_id($my)." wurde angelegt.<br>";
    else echo "<mark>Datensatz konnte nicht angelegt werden.</mark><br>Fehler: ".mysqli_error($my)."<br>";
  }
  reset($personen);
?>

Mit dem Befehl INSERT wird nun ein neuer Eintrag in die Datenbank vorgenommen. Die Syntax ist dabei immer:

INSERT INTO tabellenname (spaltenname1, spaltenname2, …) VALUES ($variable1, $variable2, …)

In der Werteliste in der Klammer nach VALUES müssen alphanumerische Variablen in Anführungszeichen stehen, während bei Zahlenwerten keine Anführungszeichen verwendet werden müssen.

Ein Wert für die Spalte id wird nicht angegeben, da diese Spalte den Primärschlüssel trägt und durch das Attribut AUTO_INCREMENT der Wert automatisch eingetragen wird. Über die Funktion mysqli_insert_id() lässt sich dieser Wert ermitteln.

Daten auswählen und anzeigen #

► MySQL-Dokumentation: SELECT

Um Datensätze aus einer Tabelle auszuwählen, wird der Befehl SELECT verwendet. Soll der gesamte Datensatz ausgewählt werden, wird dies durch das Sternchen * gekennzeichnet. Sollen nur einzelne Datenfelder gewählt werden, werden diese stattdessen durch Komma getrennt angegeben.

Beispiel: SELECT `vorname`, `nachname` FROM `adressen`

Das Ergebnis der Abfrage mysqli_query() enthält alle angeforderten Datensätze, die mit mysqli_fetch_assoc() in einer while-Schleife zeilenweise in das Array $ds eingelesen und dann als Tabelle wieder ausgeben werden.

Quelltext auswählen
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
29
30
31
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  function html($str) {
    return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8');
  }
  
  $dbtname = "adressen";
  $sql = "SELECT * FROM `".$dbtname."`";
  if ($res = mysqli_query($my, $sql)) {
    if (mysqli_num_rows($res)) {
      echo "<table><tr><th>ID</th><th>Vorname</th><th>Nachname</th><th>Straße</th><th>Hausnummer</th><th>PLZ</th><th>Ort</th><th>Geburtsdatum</th><th>Telefon</th><th>Kommentar</th></tr>";
      while ($ds = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>".html($ds['id'])."</td>";
        echo "<td>".html($ds['vorname'])."</td>";
        echo "<td>".html($ds['nachname'])."</td>";
        echo "<td>".html($ds['strasse'])."</td>";
        echo "<td>".html($ds['hausnummer'])."</td>";
        echo "<td>".html($ds['plz'])."</td>";
        echo "<td>".html($ds['ort'])."</td>";
        echo "<td>".html($ds['geburtsdatum'])."</td>";
        echo "<td>".html($ds['telefon'])."</td>";
        echo "<td>".html($ds['kommentar'])."</td>";
        echo "</tr>";
      }
      echo "</table>";
    } else echo "Tabelle enthält keine Datensätze.";
  } else echo "SQL-Query gescheitert. ".mysqli_error($my);
?>

Auswahl begrenzen #

Will man nicht alle Datensätze der Tabelle erhalten, kann die Abfrage mit LIMIT begrenzt werden. Der erste Wert gibt die Startposition der Abfrage an, der zweite Wert die Anzahl der Datensätze. Im Beispiel werden 5 Datensätze beginnend mit dem 3. Datensatz ausgegeben, wobei der 3. Datensatz die Nummer 2 trägt, da mit der Zählung bei 0 begonnen wird. Diese Zahl ist nicht identisch mit dem Wert der Spalte id, da bei gelöschten Einträgen Datensätze fehlen werden.

Quelltext auswählen
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
29
30
31
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  function html($str) {
    return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8');
  }
  
  $dbtname = "adressen";
  $sql = "SELECT * FROM `".$dbtname."` LIMIT 2,5";
  if ($res = mysqli_query($my, $sql)) {
    if (mysqli_num_rows($res)) {
      echo "<table><tr><th>ID</th><th>Vorname</th><th>Nachname</th><th>Straße</th><th>Hausnummer</th><th>PLZ</th><th>Ort</th><th>Geburtsdatum</th><th>Telefon</th><th>Kommentar</th></tr>";
      while ($ds = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>".html($ds['id'])."</td>";
        echo "<td>".html($ds['vorname'])."</td>";
        echo "<td>".html($ds['nachname'])."</td>";
        echo "<td>".html($ds['strasse'])."</td>";
        echo "<td>".html($ds['hausnummer'])."</td>";
        echo "<td>".html($ds['plz'])."</td>";
        echo "<td>".html($ds['ort'])."</td>";
        echo "<td>".html($ds['geburtsdatum'])."</td>";
        echo "<td>".html($ds['telefon'])."</td>";
        echo "<td>".html($ds['kommentar'])."</td>";
        echo "</tr>";
      }
      echo "</table>";
    } else echo "Tabelle enthält keine Datensätze.";
  } else echo "SQL-Query gescheitert. ".mysqli_error($my);
?>

Liste sortieren #

Möchte man die Liste nach bestimmten Kriterien sortieren, wird der Befehl um ORDER BY ergänzt, mit Angabe der gewünschten Spalte, nach der sortiert werden soll (hier: nachname). Die Werte ASC (ascending) oder DESC (descending) geben die Sortierrichtung an.

Quelltext auswählen
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
29
30
31
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  function html($str) {
    return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8');
  }
  
  $dbtname = "adressen";
  $sql = "SELECT * FROM `".$dbtname."` ORDER BY `nachname` ASC LIMIT 2,5";
  if ($res = mysqli_query($my, $sql)) {
    if (mysqli_num_rows($res)) {
      echo "<table><tr><th>ID</th><th>Vorname</th><th>Nachname</th><th>Straße</th><th>Hausnummer</th><th>PLZ</th><th>Ort</th><th>Geburtsdatum</th><th>Telefon</th><th>Kommentar</th></tr>";
      while ($ds = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>".html($ds['id'])."</td>";
        echo "<td>".html($ds['vorname'])."</td>";
        echo "<td>".html($ds['nachname'])."</td>";
        echo "<td>".html($ds['strasse'])."</td>";
        echo "<td>".html($ds['hausnummer'])."</td>";
        echo "<td>".html($ds['plz'])."</td>";
        echo "<td>".html($ds['ort'])."</td>";
        echo "<td>".html($ds['geburtsdatum'])."</td>";
        echo "<td>".html($ds['telefon'])."</td>";
        echo "<td>".html($ds['kommentar'])."</td>";
        echo "</tr>";
      }
      echo "</table>";
    } else echo "Tabelle enthält keine Datensätze.";
  } else echo "SQL-Query gescheitert. ".mysqli_error($my);
?>

Bestimmte Datensätze auswählen #

Datensätze können auch nach Suchkriterien ausgewählt werden, die mit WHERE angegeben werden. Im Beispiel sollen alle Datensätze gesucht werden, bei denen die Spalte nachname den Wert Müller enthält.

Quelltext auswählen
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
29
30
31
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  function html($str) {
    return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8');
  }
  
  $dbtname = "adressen";
  $sql = "SELECT * FROM `".$dbtname."` WHERE `nachname` = 'Müller'";
  if ($res = mysqli_query($my, $sql)) {
    if (mysqli_num_rows($res)) {
      echo "<table><tr><th>ID</th><th>Vorname</th><th>Nachname</th><th>Straße</th><th>Hausnummer</th><th>PLZ</th><th>Ort</th><th>Geburtsdatum</th><th>Telefon</th><th>Kommentar</th></tr>";
      while ($ds = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>".html($ds['id'])."</td>";
        echo "<td>".html($ds['vorname'])."</td>";
        echo "<td>".html($ds['nachname'])."</td>";
        echo "<td>".html($ds['strasse'])."</td>";
        echo "<td>".html($ds['hausnummer'])."</td>";
        echo "<td>".html($ds['plz'])."</td>";
        echo "<td>".html($ds['ort'])."</td>";
        echo "<td>".html($ds['geburtsdatum'])."</td>";
        echo "<td>".html($ds['telefon'])."</td>";
        echo "<td>".html($ds['kommentar'])."</td>";
        echo "</tr>";
      }
      echo "</table>";
    } else echo "Tabelle enthält keine Datensätze.";
  } else echo "SQL-Query gescheitert. ".mysqli_error($my);
?>

Mit LIKE können Einträge gefunden werden, die das angegebene Suchkriterium enthalten. Der Platzhalter % steht dabei für eine beliebige Anzahl von Zeichen, der Platzhalter _ für eine genaue Anzahl von Zeichen.

Beispiele:
SELECT * FROM `adressen` WHERE `nachname` LIKE '%er' – findet Meier und Müller
SELECT * FROM `adressen` WHERE `vorname` LIKE 'pa%' – findet Paul und Paula
SELECT * FROM `adressen` WHERE `nachname` LIKE 'M__er' – findet Meier aber nicht Müller

Quelltext auswählen
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
29
30
31
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  function html($str) {
    return htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8');
  }
  
  $dbtname = "adressen";
  $sql = "SELECT * FROM `".$dbtname."` WHERE `nachname` LIKE '%er'";
  if ($res = mysqli_query($my, $sql)) {
    if (mysqli_num_rows($res)) {
      echo "<table><tr><th>ID</th><th>Vorname</th><th>Nachname</th><th>Straße</th><th>Hausnummer</th><th>PLZ</th><th>Ort</th><th>Geburtsdatum</th><th>Telefon</th><th>Kommentar</th></tr>";
      while ($ds = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>".html($ds['id'])."</td>";
        echo "<td>".html($ds['vorname'])."</td>";
        echo "<td>".html($ds['nachname'])."</td>";
        echo "<td>".html($ds['strasse'])."</td>";
        echo "<td>".html($ds['hausnummer'])."</td>";
        echo "<td>".html($ds['plz'])."</td>";
        echo "<td>".html($ds['ort'])."</td>";
        echo "<td>".html($ds['geburtsdatum'])."</td>";
        echo "<td>".html($ds['telefon'])."</td>";
        echo "<td>".html($ds['kommentar'])."</td>";
        echo "</tr>";
      }
      echo "</table>";
    } else echo "Tabelle enthält keine Datensätze.";
  } else echo "SQL-Query gescheitert. ".mysqli_error($my);
?>

Datensatz bearbeiten #

► MySQL-Dokumentation: UPDATE

Um Datensätze zu aktualisieren, wird der Befehl UPDATE verwendet.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  $dbtname = "adressen";
  $ds = 5;
  $person = array("Uschi", "Schmidt", "Waldweg", 129, 10001, "Musterstadt", "12.05.1932", "65234", "");
  $sql = "UPDATE `".$dbtname."` SET
    `vorname`      = '".$person[0]."',
    `nachname`     = '".$person[1]."',
    `strasse`      = '".$person[2]."',
    `hausnummer`   =  ".$person[3].",
    `plz`          =  ".$person[4].",
    `ort`          = '".$person[5]."',
    `geburtsdatum` = '".$person[6]."',
    `telefon`      = '".$person[7]."',
    `kommentar`    = '".$person[8]."'
    WHERE id = '".$ds."'";
  if (mysqli_query($my, $sql)) echo "Datensatz #".$ds." wurde aktualisiert.";
  else echo "<mark>Datensatz #".$ds." konnte nicht aktualisiert werden.</mark><br>Fehler: ".mysqli_error($my)."<br>";
?>

Kopie eines Datensatzes erzeugen #

► MySQL-Dokumentation: INSERT

Um einen Datensatz zu kopieren, wird der Befehl INSERT … SELECT verwendet.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
11
12
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  $dbtname = "adressen";
  $ds = 4;
  $sql = "INSERT INTO `adressen` (`vorname`, `nachname`, `strasse`, `hausnummer`, `plz`, `ort`, `geburtsdatum`, `telefon`, `kommentar`)
          SELECT `vorname`, `nachname`, `strasse`, `hausnummer`, `plz`, `ort`, `geburtsdatum`, `telefon`, `kommentar`
          FROM `adressen` WHERE `id` = '".$ds."'";
  if (mysqli_query($my, $sql)) echo "Datensatz #".$ds." wurde kopiert.";
  else echo "<mark>Datensatz #".$ds." konnte nicht kopiert werden.</mark><br>Fehler: ".mysqli_error($my)."<br>";
?>

Datensatz löschen #

► MySQL-Dokumentation: DELETE

Um Einträge zu löschen, wird der Befehl DELETE verwendet.

Quelltext auswählen
1
2
3
4
5
6
7
8
9
10
<?php
  header("Content-Type: text/html; charset=utf-8");
  require("db.inc.php");
  
  $dbtname = "adressen";
  $ds = 5;
  $sql = "DELETE FROM `".$dbtname."` WHERE id = '".$ds."'";
  if (mysqli_query($my, $sql)) echo "Datensatz #".$ds." wurde gelöscht.";
  else echo "<mark>Datensatz #".$ds." konnte nicht gelöscht werden.</mark><br>Fehler: ".mysqli_error($my)."<br>";
?>