Mit begrenztem Wissen über Computer, Software und 42

schreibt Andre

MySQL mit PHP Felder von Tabellen umbenennen

13.02.12 (Allgemein, MySQL, PHP)

MySQL Felder mit PHP umbenennen

Hallo liebe Leser,

auch dieser Beitrag befasst sich mit MySQL und PHP. In diesem Fall bin ich beim Umbenennen von Feldern per PHP-Script an MySQL gescheitert. Eigentlich kann man Felder per SQL mit:

ALTER TABLE Tabname RENAME FeldNameAlt TO FeldNameNeu

den Feldnamen einfach ändern, allerdings geht dies nicht bei MySQL (Version 5.0.18). Hier hilft nur folgendes:

ALTER TABLE Tabname CHANGE FeldNameAlt FeldNameNeu FELDDEFINITION

Die Felddefinition umfasst Datentyp, Defaultwert, Kommentare, Index, CharSet usw. Wenn man diese nicht ändern möchte, muss man diese Informationen für jedes umzubenennende Feld aus der vorhandenen Tabelle auslesen und in den SQL-Sring einbauen.

In der Annahme, dass auch andere PHPler – und nicht nur ich – über diese Aufgabe stolpern, und ich im Netz auf die Schnelle keine brauchbare PHP-Funktion gefunden habe, veröffentliche ich hier meine PHP-Funktion. In dieser Funktion verwende ich eine etwas merkwürdige Datenbank-Klasse, aber anhand der Beschreibung sollte es kein Problem sein, die Funktion auf die eigenen Rahmenbedingungen anzupassen.

function feld_umbenennen($altername, $neuername)
{
    //Verbinden zur Datenbank, Datenbank-Klasse initialisieren
    $db1 = db();
    //Abfragen der Feldinformationen des umzubenennenden Feldes
    $sql = "SHOW FULL COLUMNS FROM Tabname LIKE  '".$altername."'";
    $erg = $db1->execute($sql);
    //Null-Werte erlaubt oder nicht
    if($erg[1]['Null'] == 'YES'){ $null = ' NULL ';}
    else{ $null = ' NOT NULL ';}
    //Default-Wert vorhanden?
    if($erg[1]['Default'] == ''){ $default = ' ';}
    else{ $default = ' DEFAULT '.$erg[1]['Default'].' ';}
    //Kommentar vorhanden?
    if($erg[1]['Comment'] == ''){ $comment = ' ';}
    else{ $comment = " COMMENT '".$erg[1]['Comment']."'";}
    //Zusammenbauen des SQL-Strings zum Ändern der Tabelle/des Feldnamens
    $sql_d1 = "ALTER TABLE Tabname CHANGE ".$altername."  ".$neuername." ".$erg[1]['Type']."  ".$null." ".$default." ".$comment." ";
    $erg_d1 = $db1->execute($sql_d1);
return TRUE;
}

Achtung: Diese Funktion passt keine Indexe an.

Die Methode execute() der Datenbank-Klasse gibt ein mehrdimensionales Array zurück. Jeder Datensatz der Ergebnismenge wird mit mysql_fetch_assoc einem neuen Element des Arrays zugewiesen (wobei bei 1 begonnen wird zu zählen). Das Ergebnisarray ($erg) enthält also in der ersten Zeile die Informationen des alten Feldes. Folgende Informationen werden mit

SHOW FULL COLUMS FROM Tabname

geliefert:

['Null'] = YES =>Nullwerte erlaubt
['Default'] = Defaultwert oder NULL (hier abgefragt über Leerstring (=='') )
['Comment'] = Kommentar zum Feld oder NULL (hier abgefragt über Leerstring (=='') )
['Type'] = Feldtyp (INTEGER oder VARCHAR(255) etc. )

Um nur wenige Felder umzubenennen, kann man natürlich per Hand z.B. mit PHPMyAdmin oder Heidi-Sql agieren, da braucht man natürlich kein eigenes Script für.

Suchbegriffe

  • feld umbenennen sql
  • php mysql felder richig benennen
  • phpMyAdmin spalte umbennenen
  • sql feld umbenennen