MySQL Tabelle/n über PHP Script anlegen

Yasha

Commander
Mitglied seit
13.05.2008
Beiträge
158
Renomée
0
Huhu,
ich beschäftige mich seit gestern mit PHP. Also noch nicht sehr lang =)

Ich versuche im moment einfach nur eine Tabelle über ein Script in der MySQL Datenbank zu erstellen. Im Grunde, hat das ganze auch geklappt. Nur würde ich auch gerne abfragen, ob der teil mit dem erstellen der Tabelle auch geklappt hat. Aber irgendwie bekomme ich das nicht hin. So sieht es im moment aus:


PHP:
<?php
//Datenbank verbindung herstellen
$link = mysql_connect('localhost', 'yasha', 'test121');
if (!$link) {
  die('Verbindung zur Datenbank nicht möglich: ' . mysql_error());
}

//Datehnbank auswählen
$db_select = mysql_select_db('yasha', $link);
  if (!$db_select) {
 die('Datenbankzugriff fehlgeschlagen : ' . mysql_error());
}

//Datenbanktabelle erstellen
if($sql = "CREATE TABLE login (
  Id Int(11) NOT NULL auto_increment, 
  Nickname VarChar(30) NOT NULL default, 
  Kennwort VarChar(50) NOT NULL default,
  PRIMARY KEY (id)
)"); {
print "Tabelle erfolgreich angelegt.<br>";
}
else {
print "Fehler beim anlegen der Tabelle";
}

//Verbindungen beenden
mysql_query($sql,$link);
mysql_close($link);
?>
So der teil bei "if($sql = "CREATE TABLE login (..." tut es überhaupt nicht. Wenn ich das mit dem if und so weglasse funktioniert das anlegen. Aber wie gesagt, ich würde gerne abfragen ob das anlegen nun geklappt hat oder halt nicht. Kann mir vllt. jemand weiterhelfen?
 
Also, erstmal hast Du innerhalb der IF-Schleife ein ; zuviel.

Zweitens, machst mit $sql="..." nur eine Zuweisung an die Variable, da passiert ja überhaupt nix!

Lösung:

PHP:
<?php
//Datenbank verbindung herstellen
$link = mysql_connect('localhost', 'yasha', 'test121');
if (!$link) {
  die('Verbindung zur Datenbank nicht möglich: ' . mysql_error());
}

//Datehnbank auswählen
$db_select = mysql_select_db('yasha', $link);
  if (!$db_select) {
 die('Datenbankzugriff fehlgeschlagen : ' . mysql_error());
}

//Datenbanktabelle erstellen
$query="CREATE TABLE login (
  Id Int(11) NOT NULL auto_increment, 
  Nickname VarChar(30) NOT NULL default, 
  Kennwort VarChar(50) NOT NULL default,
  PRIMARY KEY (id)
)";
if(mysql_query($query,$link)) {
print "Tabelle erfolgreich angelegt.<br>";
}
else {
print "Fehler beim anlegen der Tabelle";
}

//Verbindungen beenden
mysql_close($link); 
?>

Das sollte dann gehen!
 
Erster Fehler: Nach der If-Abfrage darf kein Semikolon kommen.
PHP:
# Richtig:
if(...) {
  # do some stuff...
}

# Falsch:
if(...); {
  # do some stuff...
}

Zweiter Fehler: Du überprüfst ob die Variable $sql richtig geklariert wird, nicht aber ob die Tabelle angelegt wurde. Das machst du nämlich erst in der vorletzten Zeile.

Wenn du überprüfen willst ob eine SQL-Query erfolgreich war, musst du den Rückgabewert von mysql_query überprüfen.

Gruß,
Max

EDIT: Zu langsam. :(
 
Zuletzt bearbeitet:
Huhu,
jetzt heißt es immer das die Tabelle nicht angelegt werden konnte. Und er tut auch keine anlegen. Mhm, komplizierter als ich dachte der ganze PHP kram =)
 
Hat der Benutzer die entsprechenden Rechte?

Existiert die Tabelle schon in der Datenbank?

Oder:
PHP:
$result=mysql_query($query,$link);
if($result) .....
 
Ja, der Benutzer hat die richtigen Rechte. Über phpMyAdmin klappt das anlegen. Die Tabelle existiert auch nicht. Die hatte ich schon wieder gelöscht nach dem der Versuch ohne Abfrage funktioniert hat.

Werd dein Tipp gleich mal probieren. Thx
.
EDIT :
.

So nochmal ich =)

Hab es jetzt ein klein wenig umgeändert um die MySQL Fehlermeldung zu sehen. Beim Anlegen heißt es nun:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' kennwort varchar(50) NOT NULL default, PRIMARY KEY (id) )' at line 3
Hab auf der MySQL Seite geschaut und mir auch andere Scripte angeschaut die Tabellen anlegen. Im Grunde hab ich da kein Fehler gefunden. Hab auch 10 mal geschaut ob ich nicht irgendwo ein "," oder ";" vergessen hab. Aber da ist alles da....
 
Du verwendest default um einen Standardwert vorzugeben, gibst aber keinen Wert an. Hänge an das default mal zwei Anführungszeichen '' ran (einzelne ', nicht das doppelte).
 
Zurück
Oben Unten