Seite 1 von 1

Existenz von Tabellen prüfen

Verfasst: 27.08.2004 16:52
von Souli
Ahoi,

und nun der Albtraum eines jeden Coders:
Ich "nerve" mit gefährlichem Halbwissen :-) ;-)

Wie kann ich prüfen, ob eine bestimmte Tabelle exisitiert ?
Ich komme da in PHP und MySQL nicht wirklich weiter.

Hier habe ich einen Code aus dem Internet:

Code: Alles auswählen

function isTableInDB($table)
{
  $sql = "select * from $table limit 1";
  $r = @mysql_query($sql);
  if (!$r) {
    return false;
  }
  return true;
}
Meine Kenntnisse reichten leider nicht zum Selbererstellen des Codes aus :-(

Die Tabelle, deren Existenz ich prüfen möchte heißt "thomas".
Dazu brauche ich doch eigentlich nur die Variable $table durch $thomas
zu ersetzen...oder ?

Wie kann ich nun eigentlich über if / else den Status abfragen ?
Bei true würde ich ein "alt" machen um eine Spalte einzufügen,
bei false würde ich die Tabelle per "create" mit einer Spalte erstellen.

Das dachte ich mir dann so:

Code: Alles auswählen

// Datenbanktabelle erstellen bei false
mysql_query ("CREATE TABLE IF NOT EXISTS thomas(".$kategorie." CHAR(50))")
		or die ("Fehler beim Erstellen: " . mysql_error());

// Nachträglich eine Tabelle einfügen bei true
mysql_query ("ALTER TABLE thomas ADD(".$kategorie." CHAR(50))")
		or die ("Fehler beim Erstellen: " . mysql_error());
Die Variable "kategorie" wird per Formular übergeben und legt den
Namen der Spalte fest.
Allerdings ist dann in der Spalte noch kein Inhalt !

Geht so etwas überhaupt ?
Also eine leere Tabelle auf ihre Existenz abzufragen.
Wie würde es bei einer Tabelle mit Daten aussehen...anders ?

Danke und Grüße von der Küste
Souli

Verfasst: 27.08.2004 17:14
von D@ve
Warum überhaupt prüfen? Erstell doch einfach die Tabelle wenn's nicht geklappt hat siehst Du's ja an der MySQL-Fehlermeldung.

Code: Alles auswählen

$result = mysql_query("CREATE TABLE `thomas` (`test` INT NOT NULL )");

if (mysql_error())
  echo mysql_error();
else
  echo "Alles roger, Tabelle wurde erstellt";
Gruß, Dave

Verfasst: 27.08.2004 17:21
von Souli
Ah, ich verstehe.
Gute Idee.

Dankeschön
Souli

Verfasst: 27.08.2004 17:42
von Souli
funzt prima :-) ;-)

Verfasst: 16.10.2005 15:38
von Matlock
D@ve hat geschrieben:Warum überhaupt prüfen? Erstell doch einfach die Tabelle wenn's nicht geklappt hat siehst Du's ja an der MySQL-Fehlermeldung.

Code: Alles auswählen

$result = mysql_query("CREATE TABLE `thomas` (`test` INT NOT NULL )");

if (mysql_error())
  echo mysql_error();
else
  echo "Alles roger, Tabelle wurde erstellt";
Gruß, Dave
So was ähnliches hab ich auch gesucht. Allerdings möchte ich nicht, daß eine Fehlemeldung ausgegeben wird, sondern dann "was anders" passiert. Konkret:

Ein Datensatz soll in einer Tabelle abgespeichert werden. Ich weiß vorher nicht, ob die Tabelle bereits existiert.

Es gibt also zwei Möglichkeiten:

a) die Tabelle existiert bereits
dann soll der Datensatz einfach abgespeichert werden (wer hätte das gedacht :grin:)

b) die Tabelle existiert noch nicht
dann soll erst die Tabelle erstellt werden und danach der Datensatz darin abgespeichert werden

Wie muß ich vorgehen? Bzw. wie muß ich das o. g. Beispiel abwandeln?

Einfach "auf gut Glück" versuchen eine neue Tabelle anlegen, kanns in diesem Fall ja nicht sein. Denn wenn sie bereits existiert (gleicher Name, klar) gibts bestimmt einen Fehler und das Skript hat fertig. Wie schaut das aus? Wird bei vorhandener namensgleicher Tabelle die alte überschrieben, was ich natürlich gar nicht brauchen kann oder kommt dann ein mysql-Error, der meckert, daß die Tabelle schon existiert (und ich den neuen Datensatz dann natürlich auch nicht abspeichern kann)?

Zusatzfrage: Wieviele Tabellen kann man in einer Datenbank anlegen? Gibts da eine Obergrenze?

Verfasst: 16.10.2005 19:02
von Pyramide
Es gibt bei MySQL die Zusätze CREATE TABLE IF NOT EXISTS <name> <felder> (Tabelle erstellen, sofern sie noch nicht bereits existiert) und DROP TABLE IF EXISTS <name> (Tabelle löschen, wenn sie existiert). Allerdings sorgt das insbesondere bei stark frequentierten Anwendungen für eine Menge unnötiger Queries (die Tabellen müssen schließlich nur einmal erstellt werden).

Verfasst: 16.10.2005 23:04
von Matlock
Ah, danke :)