SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=275&group=48
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Datenbanktabellen ändern


Nachdem Sie nun wissen, wie man Datenbanktabellen erzeugt und entfernt, wollen wir Ihnen nun noch zeigen, wie Sie Änderungen an der Datenbanktabellenstruktur vornehmen können.

Sie haben die Möglichkeit, einzelne Felder hinzuzufügen, zu löschen oder deren Typ zu ändern. Die Änderungen erfolgen dabei mithilfe der MySQL-Anweisung ALTER, die Sie mit query() oder mysqli_query() an den Server senden.


Felder hinzufügen

Das folgende Beispiel demonstriert, wie neue Felder in eine Datenbanktabelle eingefügt werden kann:

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim', 'Verein');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "ALTER TABLE Mitglieder ADD Telefon CHAR(14)";

if ($db->query($sql_befehl)) {
  // Meldung bei Erfolg
  echo "Datenbanktabelle wurde erfolgreich erweitert.";  
} else {
  // Meldung bei Fehlschlag
  echo "Datenbanktabelle konnte nicht geändert werden!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Im vorliegenden Beispiel wird das Feld Telefon mit dem Typ CHAR hinzugefügt.


Feldtyp ändern

Wollen Sie den Typ eines bestehenden Feldes ändern, lässt sich dies wie folgt umsetzen:

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim', 'Verein');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "ALTER TABLE Mitglieder MODIFY Telefon INTEGER";

if ($db->query($sql_befehl)) {
  // Meldung bei Erfolg
  echo "Datenbanktabelle wurde erfolgreich modifiziert.";  
} else {
  // Meldung bei Fehlschlag
  echo "Datenbanktabelle konnte nicht modifiziert werden!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Nun besitzt das Feld Telefon den Typ INTEGER.

Achtung: Das Ändern des Typs eines Feldes sollte äußerst sorgfältig durchgeführt werden. Nicht jeder Typ lässt sich in einen anderen Typ umwandeln. Daher ist darauf zu achten, dass es zu keinem Datenverlust kommt.
{PSP}Feld löschen

Das Löschen von Feldern bereitet keine Schwierigkeiten. Natürlich sollte klar sein, dass die Entfernung eines Feldes grundsätzlich zu einem Datenverlust führt.

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim', 'Verein');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "ALTER TABLE Mitglieder DROP COLUMN Telefon";

if ($db->query($sql_befehl)) {
  // Meldung bei Erfolg
  echo "Datenbankfeld wurde erfolgreich gelöscht.";  
} else {
  // Meldung bei Fehlschlag
  echo "Datenbankfeld konnte nicht gelöscht werden!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Ermitteln der Tabellenstruktur via MySQLi-Unterstützung

Die meisten Methoden, die Informationen über Tabellen und Felder liefern, beziehen sich auf die Tabelleninhalte (Ergebnistabellen). Wie gelangt man jedoch an die Tabellenstruktur? – Selbstverständlich steht Ihnen auch hierfür eine Kombination aus SQL-Abfragen und MySQLi-Methoden zur Verfügung, die es Ihnen ermöglichen, auf die Tabellenstruktur zuzugreifen.

Beispiel – DESCRIBE
<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim', 'Verein');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "DESCRIBE Mitglieder";

if ($resultat = $db->query($sql_befehl)) {
  // Abfrageergebnis durchlaufen
  while($feldinfo = $resultat->fetch_assoc())
  {
    // Datenfeldinformationen durchlaufen
    foreach ($feldinfo as $wert)
    {
      if (!empty($wert))
      {
        echo $wert . " / ";
      }
    }
    echo "<br>";
  }
  $resultat->close();
} else {
  // Meldung bei Fehlschlag
  echo "Datenbanktabelle konnte nicht modifiziert werden!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Ausgabe
MitgliedID / int(11) / NO / PRI / auto_increment /
MitgliedVorname / char(40) / YES /
MitgliedNachname / char(40) / YES /
Aufgabe / char(40) / YES /
Geburtsdatum / date / YES /