• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

MySqli - Datenbanktabelle anlegen

DeletedUser86497

Gast
Hallo Liebe Leute,
Habe heute angefangen MySqli zu lernen. Hab in meinem schönen Büchlein nachgelsen wie man eine Datenbank erstellt und das dann auch gemacht. Dann wollte ich eine Tabelle erstellen, allerdings funktioniert bei mir der Code aus dem buch nicht:
<?php
@$db = new mysql('localhost', 'root', 'root', 'testbank');

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

$sql_befehl = "CREATE TABLE IF NOT EXISTS stadt (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) DEFAULT NULL,
bevdichte FLOAT DEFAULT NULL,
PRIMARY KEY (id)
)";

if($db->query($mysql_befehl))
{
echo "Datenbanktabelle erfolgreich angelegt.";

}else{
echo "Datenbanktabelle konnte nicht angelegt werden!";
}

$db->close();

?>

Ist jetzt nur eine Testdatenbank daher nicht über die Namen wundern. Benutze das XAMPP Paket.
Weiß wer Rat?
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
Hi,

ich weiß zwar nicht, warum Du mit PHP die Tabelle anlegen willst, aber bitte, auch ich bin trotz meines Alters, noch lernfähig ;-) . Warum verwendest Du nicht die Tools von MySql? Da gibt's einen tollen MySQL Query Browser (der heisst auch so) der alles macht was Du brauchst. Danach kannst Du ja mit PHP auf der Tabelle machen was Du willst (lesen, schreiben, löschen).
Du brauchst natürlich auch einen Benutzer der berechtigt ist, Tabellen anzulegen. Bist Du an MySQL angemeldet? Hast Du einen Benutzer angelegt? Hast Du ein eigenes Schema angelegt? Du solltest auch ein abschliessendes Semicolon in den String aufnehmen.
Wenn ich mich recht en
$sql_befehl = "CREATE TABLE IF NOT EXISTS stadt (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) DEFAULT NULL,
bevdichte FLOAT DEFAULT NULL,
PRIMARY KEY (id)
);";

MySQL frisst DEFAULT NULL für VARCHAR und FLOAT nicht.

CREATE TABLE `meine_staedte`.`stadt` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`bevdichte` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Das funktioniert. Man soll nicht alles glauben, was in Büchern steht :)
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser86497

Gast
Nunja wie gesagt ich bin Anfänger :)
Keine Ahung von nix, vorerst ;-)

Das Semikolon hat nichts gebracht, ich bekomme weiterhin einfach ein leere Seite zu Gesicht :|
 

DeletedUser

Gast
[...]

@$db = new mysqli('localhost', 'root', 'root', 'testbank');

[...]

Ich würde einfach mal probieren ein MySQLi Objekt zu erzeugen, wenn du schon so eines verwenden willst ;-)
Btw: Wieso verwendest du die prozeduralen Funktionen von MySQLi, wenn du doch schon ein Objekt instanziiert hast?

Edit: Hier gibts ein IMHO gutes Tutorial über MySQLi ;-)
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser86497

Gast
Ich würde einfach mal probieren ein MySQLi Objekt zu erzeugen, wenn du schon so eines verwenden willst ;-)
Danke, das "i" hats gebracht ich bekomme immerhin schon die Fehlermeldung dass es nicht funktionert hat ;-)


Btw: Wieso verwendest du die prozeduralen Funktionen von MySQLi, wenn du doch schon ein Objekt instanziiert hast?
Öhm ja frag mal lieber mein Buch ich weis ehrlich gesagt nicht wovon du redest :mrgreen:
 

DeletedUser86497

Gast
MySQL frisst DEFAULT NULL für VARCHAR und FLOAT nicht.

CREATE TABLE `meine_staedte`.`stadt` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`bevdichte` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Das funktioniert. Man soll nicht alles glauben, was in Büchern steht :)

Bekomme folgende Fehlermeldung:
Warning: mysqli::query() [mysqli.query]: Empty query in C:\xampp\htdocs\mysqli\mysqli_datenbanktabelle_anlegen.php on line 18
Datenbanktabelle konnte nicht angelegt werden!
 

DeletedUser

Gast
Öhm ja frag mal lieber mein Buch ich weis ehrlich gesagt nicht wovon du redest :mrgreen:

Ich meinte damit, dass du statt mysqli_connect_errno() auch normalerweise gleich $db->connect_errno() verwenden kannst. Dann hast du diese prozeduralen Funktionsaufrufe nicht mehr drin.

Bekomme folgende Fehlermeldung: Warning: mysqli::query() [mysqli.query]: Empty query in C:\xampp\htdocs\mysqli\mysqli_datenbanktabelle_anlegen.php on line 18
Datenbanktabelle konnte nicht angelegt werden!

Naja, er sagt dir ja schon, was falsch ist: Deine Anfrage ist leer. Vielleicht solltest du es wieder mit

Code:
$sql_befehl = "CREATE TABLE `meine_staedte`.`stadt` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`bevdichte` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;"

$db->query($sql_befehl); 

[...]

usw. probieren ;-)
Den Datenbanknamen musst du aber glaube ich noch anpassen, da die ja nicht `meine_staedte` heißt, soweit ich das mitgekriegt habe :eek:
 

DeletedUser86497

Gast
Ich meinte damit, dass du statt mysqli_connect_errno() auch normalerweise gleich $db->connect_errno() verwenden kannst. Dann hast du diese prozeduralen Funktionsaufrufe nicht mehr drin.

Fatal error: Call to undefined method mysqli::connect_errno() in C:\xampp\htdocs\mysqli\mysqli_datenbanktabelle_anlegen.php on line 4

Naja, er sagt dir ja schon, was falsch ist: Deine Anfrage ist leer. Vielleicht solltest du es wieder mit

Code:
$sql_befehl = "CREATE TABLE `meine_staedte`.`stadt` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`bevdichte` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;"

$db->query($sql_befehl); 

[...]

usw. probieren ;-)
Den Datenbanknamen musst du aber glaube ich noch anpassen, da die ja nicht `meine_staedte` heißt, soweit ich das mitgekriegt habe :eek:

Auch nicht :-(
 

DeletedUser86497

Gast
So Leute danke für eure Hilfe, ich habe es nun geschafft :mrgreen:
Über denn Sinn dieses Vorhabens kann man sich streiten aber egal

<?php
@$db = new mysqli('localhost', 'root', 'root', 'testbank');

if(mysqli_connect_errno())
{
printf("Verbindung fehlgeschlagen: %s\n",

mysqli_connect_error());
exit();
}

$sql_befehl = "CREATE TABLE IF NOT EXISTS stadt (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) DEFAULT NULL,
bevdichte FLOAT DEFAULT NULL,
PRIMARY KEY (id)
);";


if(mysqli_query($db, $sql_befehl))
{
echo "Datenbanktabelle erfolgreich angelegt.";

}else{
echo "Datenbanktabelle konnte nicht angelegt werden!";
}

mysqli_close($db);

?>
 

DeletedUser86497

Gast
Und das non-plus-ultra wäre es, wenn mir jemand den SQL-Befehl erklären könnte ab Zeile zwei :)
 

DeletedUser

Gast
Und das non-plus-ultra wäre es, wenn mir jemand den SQL-Befehl erklären könnte ab Zeile zwei :)

Ist nicht weiter tragisch das Ganze.

Code:
id INT(11) NOT NULL AUTO_INCREMENT

Es wird das Feld id angelegt. Es ist eine Ganzzahl (INT) und darf nicht leer sein (NOT NULL). Außerdem wird der Wert bei jedem Eintrag automatisch um eins erhöht (AUTO_INCREMENT), d.h. der Wert ergänzt sich bei jedem Datensatz selbst und muss nicht mit angegeben werden.

Code:
name VARCHAR(50) DEFAULT NULL

Hier wird ein Feld mit dem Namen name angelegt. Es kann (muss aber nicht) aus bis zu 50 Zeichen bestehen (VARCHAR(50)) und kann leer sein (NULL). Das ist auch zugleich der Standardwert, für den Fall, dass nichts eingetragen wird.

Code:
bevdichte FLOAT DEFAULT NULL

Nicht viel anders als das eins drüber - das Feld ist einfach nur vom Typ 'Fließkommazahl' (FLOAT).

Code:
PRIMARY KEY (id)

Dieser kleine Zusatz sagt lediglich, dass ein Primärschlüssel (PRIMARY KEY) für das Feld id in dieser Tabelle angelegt werden soll, d.h. unter anderem, dass die Werte in dieser Spalte eindeutig sein müssen, da über dieses Feld jeder Datensatz eindeutig identifiziert werden kann. (Deswegen auch meistens gleich AUTO_INCREMENT, um sicherzustellen, dass kein Wert doppelt vorkommt)


Hoffe es war verständlich, wenn du Fragen hast, dann melde dich ;-)
 

DeletedUser86497

Gast
Vielen Dank, die Typen der Zahlen kenne ich schon von C++ aber der Rest war mir nicht klar :mrgreen:
 

DeletedUser86497

Gast
"PHP 5 Objektorientierte Programmierung" von Matthias Kannengiesser
und nein ich meinte nicht direkt direkt sondern direkt mit MySQLi und nicht mit SQL ;-)
 

DeletedUser86497

Gast
Wie erstellt man Datensätze? Auch hier funktioniert die ethode aus dem Buch nicht :|
 

DeletedUser86497

Gast
Ist jaa schön und gut aber wenn ich zum Beispiel ein Formular zum registrieren machen will hilft mir das nicht weiter :-(
 

DeletedUser

Gast
Ist jaa schön und gut aber wenn ich zum Beispiel ein Formular zum registrieren machen will hilft mir das nicht weiter :-(

Na, wenn du keine einfachen INSERT-Befehle gebacken kriegst, dann solltest du dich erstmal mit SQL auseinandersetzen, bevor du mit MySQLi loslegst. Im Internet gibts dazu aber auch reichlich Lektüre ;-)
 

DeletedUser86497

Gast
Ja nur in meinem Buch stehts auch drinn aber ich find den Fehler nicht :|
<?php
@$db = new mysqli('localhost', 'root', 'root', 'testbank');

if(mysqli_connect_errno())
{
printf("Verbindung fehlgeschlagen: %s\n",

mysqli_connect_error());
exit();
}

$sql_befehl = "INSERT INTO stadt (id, name, bevdichte)
VALUES
('', 'New York', 100)
('', 'Berlin', 75)";

if(mysqli_query($db, $sql_befehl))
{
echo "Datensätze erfolgreich angelegt.";
}else{
echo "Datensätze konnten nicht angelegt werden!";
}

mysqli_close($db);

?>
 

DeletedUser

Gast
[...]

$sql_befehl = "INSERT INTO stadt (id, name, bevdichte)
VALUES
('', 'New York', 100)
('', 'Berlin', 75)";

[...]

Probiers doch mal so

Code:
$sql_befehl = "INSERT INTO stadt (name, bevdichte)
VALUES 
('New York', 100),
('Berlin', 75)";

Die ID ist ja AUTO_INCREMENT, wenn ich mich recht entsinne, d.h. diese Spalte muss nicht angegeben werden, da sie sich selbst 'aktualisiert'. Mit einem leeren Wert geht das freilich schief, da dann auch ein 'leerer' Wert (NULL) eingetragen werden dürfte und somit das NOT NULL bei id nicht mehr eingehalten wird.

Und jetzt mal ganz ehrlich: Wenn ich du wäre, würde ich mich nach einem anderen Buch umsehen, da hier anscheinend kein einziges Beispiel so richtig funktioniert. Abgesehen davon werden die Eingaben nichtmal überprüft und Prepared Statements (einer der großen Vorteile an MySQLi) werden anscheinend auch nicht benutzt ... :S
 

DeletedUser86497

Gast
Überprüfung der Eingaben und vorgefertigte Abfragen kommen später :mrgreen:
Aber die Beispiele sind wirklich komisch :S
edenfalls danke für die Hilfe hatte mich offensichtlich falsch ausgedrückt habe noch keine erfahrungen mit Datenbanken bzw MySQL und so Zeugs
Wie man das ganze ausließt versuch ich mal selbst herauszufinden :)
 

DeletedUser

Gast
Probiers doch mal so

Code:
$sql_befehl = "INSERT INTO stadt (name, bevdichte)
VALUES 
('New York', 100),
('Berlin', 75)";

Die ID ist ja AUTO_INCREMENT, wenn ich mich recht entsinne, d.h. diese Spalte muss nicht angegeben werden, da sie sich selbst 'aktualisiert'. Mit einem leeren Wert geht das freilich schief, da dann auch ein 'leerer' Wert (NULL) eingetragen werden dürfte und somit das NOT NULL bei id nicht mehr eingehalten wird.
Seit wann is ein leerer String NULL? Wenn ich mich nicht täusche, muss man, wenn an NULL einfügen will, das auch explizit schreiben. (insert into ichbineinetabelle (bla,bli) values (NULL,"blub"))
Und jetzt mal ganz ehrlich: Wenn ich du wäre, würde ich mich nach einem anderen Buch umsehen, da hier anscheinend kein einziges Beispiel so richtig funktioniert.
seh ich genauso
Abgesehen davon werden die Eingaben nichtmal überprüft und Prepared Statements (einer der großen Vorteile an MySQLi) werden anscheinend auch nicht benutzt ... :S

Man sollte die Abfragen erstmal normal lernen, bevor man schon Perpared Statesments benutzt. Dadurch sieht man auch gleich, was selbige für Vorteile bringen.
 
Oben