Existenz von Tabellen prüfen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Souli
Mitglied
Beiträge: 45
Registriert: 23.10.2003 22:20

Existenz von Tabellen prüfen

Beitrag 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
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag 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
There are only 10 types of people in the world: Those who understand binary, and those who don't
Souli
Mitglied
Beiträge: 45
Registriert: 23.10.2003 22:20

Beitrag von Souli »

Ah, ich verstehe.
Gute Idee.

Dankeschön
Souli
Souli
Mitglied
Beiträge: 45
Registriert: 23.10.2003 22:20

Beitrag von Souli »

funzt prima :-) ;-)
Matlock
Mitglied
Beiträge: 288
Registriert: 01.07.2003 12:32
Wohnort: Südpfalz
Kontaktdaten:

Beitrag 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?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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).
KB:knigge
Matlock
Mitglied
Beiträge: 288
Registriert: 01.07.2003 12:32
Wohnort: Südpfalz
Kontaktdaten:

Beitrag von Matlock »

Ah, danke :)
Antworten

Zurück zu „Coding & Technik“