lska: php/mysql mehrere tables auf einmal erstellen

<?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?

  1. 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 EXISTS second(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

    1. 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 EXISTS second(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??

      1. Meine Herren!

        was soll ich denn machen??

        Dir den MySQL-Fehler anzeigen lassen.

        --
        “All right, then, I'll go to hell.”
      2. 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.

        1. 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

          1. 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

          2.   
              
            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