php/mysql mehrere tables auf einmal erstellen
lska
- php
<?php
mysql_connect("localhost","root","");
mysql_select_db("data");
$query = "CREATE TABLE IF NOT EXISTS `first`(`name` varchar(50),`lastname` varchar(50),`phone` int, `gender` boolean)";
mysql_query($query);
$query = "CREATE TABLE IF NOT EXISTS `second`(`id` int(10) unsigned AUTO_INCREMENT,`company` varchar(50),`adress` varchar(50), `age` tinyint)";
mysql_query($query);
mysql_close();
?>
Bei mir erstellt er immer nur die "first"-Tabelle. Was mache ich falsch?
Moin,
$query = "CREATE TABLE IF NOT EXISTS
first
(name
varchar(50),lastname
varchar(50),phone
int,gender
boolean)";
mysql_query($query);
$query = "CREATE TABLE IF NOT EXISTSsecond
(id
int(10) unsigned AUTO_INCREMENT,company
varchar(50),adress
varchar(50),age
tinyint)";
mysql_query($query);
mysql_close();
?>[/code]
das zweite Statement ist nicht korrekt
Moin,
$query = "CREATE TABLE IF NOT EXISTS
first
(name
varchar(50),lastname
varchar(50),phone
int,gender
boolean)";
mysql_query($query);
$query = "CREATE TABLE IF NOT EXISTSsecond
(id
int(10) unsigned AUTO_INCREMENT,company
varchar(50),adress
varchar(50),age
tinyint)";
mysql_query($query);
mysql_close();
?>[/code]das zweite Statement ist nicht korrekt
was soll ich denn machen??
Meine Herren!
was soll ich denn machen??
Dir den MySQL-Fehler anzeigen lassen.
Moin
$query = "CREATE TABLE IF NOT EXISTS
second
(id
int(10) unsigned AUTO_INCREMENT,company
varchar(50),adress
varchar(50),age
tinyint)";
das zweite Statement ist nicht korrekt
was soll ich denn machen??
mysql in der shell starten und Statement eingeben zum Beispiel. Dann wird dir der Fehler angezeigt. Alternativ kannst du auch sowas wie PHP-Myadmin nutzen und dort das Statement eingeben. Auch dort wird dir der Fehler angezeigt. Natürlich kannst du dir auch via PHP den Mysql-Fehler anzeigen lassen. Ach, da gibts viele Möglichkeiten. Einfach mal bisschen spielen.
was soll ich denn machen??
mysql_connect("localhost","root","");
mysql_select_db("data");
$query = "CREATE TABLE IF NOT EXISTS `first`(`name` varchar(50),`lastname` varchar(50),`phone` int, `gender` boolean)";
mysql_query($query) or error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error() );
$query = "CREATE TABLE IF NOT EXISTS `second`(`id` int(10) unsigned AUTO_INCREMENT,`company` varchar(50),`adress` varchar(50), `age` tinyint)";
mysql_query($query) or error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error() );
mysql_close();
Du musst die Möglichkeit eines Fehler natürlich beachten. Zudem wäre gerade hier auch die Nutzung des Transaktionsmechanismus wünschenswert - was aber nur beim Tabellentyp InnoDB geht. Ist dann auch noch eine umfangreichere Abarbeitung erwünscht, dann lagere diese in eine Funktion (meinetwegen auch ein Objekt) aus:
my_error_log($s, $exit=false, $rollback=false, $db=false) {
error_log($s);
if ($db && $rollback) { mysql_query('ROLLBACK') }
if ($exit) { exit; }
}
$DB=mysql_connect("localhost","root","") or my_error_log ('Verbindungsaufbau nicht möglich', true);
mysql_select_db("data");
mysql_error($DB), true);
mysql_query('START TRANSACTION', $DB) or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true );
$query = "CREATE TABLE IF NOT EXISTS `first`(`name` varchar(50),`lastname` varchar(50),`phone` int, `gender` boolean)";
mysql_query($query, $DB) or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true, true, $DB );
$query = "CREATE TABLE IF NOT EXISTS `second`(`id` int(10) unsigned AUTO_INCREMENT,`company` varchar(50),`adress` varchar(50), `age` tinyint)";
mysql_query($query, $DB) or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true, true, $DB );
mysql_query('COMMIT', $DB) or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true );
mysql_close($DB);
Hinweise:
1.)
Der Code ist nicht getestet, er kann Typos enthalten.
2.a)
Fehler erscheinen, wenn nicht anders bestimmt, beim Aufruf via http-Protokoll im normalen Error-Log des
Webservers.
2.b)
Fehler erscheinen, wenn nicht anders bestimmt, beim Aufruf als CLI (~> php skript.php) in der Konsole.
3.)
Was __FILE__ und __LINE__ bedeuten steht im Handbuch unter "magic constants".
Jörg Reinholz
mysql_connect("localhost","root","");
Das war jetzt nicht Dein Ernst - oder?
Ich meine, dass der root sich anmeldet.
Ich meine auch, dass der root sich mit leerem Passwort anmeldet.
Das sieht nicht nur gefährlich aus, das ist es auch. Denn root kann z.B. mit select into outfile auch Dateien auf dem System erzeugen: Ein besch... Fehler (nicht abgefangene SQL-Injection, bei Deinem Wissenstand mehr wahrscheinlich als unwahrscheinlich) und das gesamte System gehört jemand anderem.
Jörg Reinholz
my_error_log($s, $exit=false, $rollback=false, $db=false) {
error_log($s);
if ($db && $rollback) { mysql_query('ROLLBACK') }
if ($exit) { exit; }
}
$DB=mysql_connect("localhost","root","") or my_error_log ('Verbindungsaufbau nicht möglich', true);
# war: mysql_select_db("data");
# war: mysql_error($DB), true);
# soll sein:
mysql_select_db("data", $DB) or or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true );
...
Jörg Reinholz