Ankündigung

Einklappen
Keine Ankündigung bisher.

merkwürdige create table statement fehlermeldung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • merkwürdige create table statement fehlermeldung

    hi,

    ich hab ne funktion die eine datenbanktabelle entsprechend der übergegebenen parameter initialisiert, desweiteren setzt sich der tabellenname aus den übergegebenen parametern zusammen:


    Code:
    <?php  
    
    
    function createMatrixTable($pSegment, $pMaxX, $pSlice, $pMaxY, $pMatID) {
    
    	// function vars
    
    	define("DBName", "test");
    	define("DBServer", "localhost");
    	define("DBUser", "htbase");
    	define("DBPasswd", "reichtum");
    
    	$wrongArgsError = "Argumente falsch übergeben, Aufruf: 1.String, 2.Int, 3.String, 4.Int 5.Int \n";
    
    	$namesOfCols = array ();
    	$namesOfRows = array ();	
    
    	// check args
    
    	if (!is_string($pSegment) or (!is_int($pMaxX)) or (!is_string($pSlice))
    	    or (!is_int($pMaxY)) or (!is_int($pMatID))) {
    		echo "$wrongArgsError";
    		exit;
    
    	} else {
    		// args ok, create row and col names
    
    		// create array which holds the names of cols
    
    		for ($i = 1; $i <= $pMaxX; $i ++) {
    
    			$namesOfCols[] = $pSegment.$i;
    			
    		}
    
    		// create array which holds the names of cols
    
    		for ($i = 1; $i <= $pMaxY; $i ++) {
    
    			$namesOfRows[] = $pSlice.$i;
    		}
    
    		// create db-conn
    
    		$dbConn = mysql_connect(DBServer, DBUser, DBPasswd) or die("Keine Verbindung möglich: ".mysql_error());
    
    		// select db
    		
    		mysql_select_db(DBName) or die("Auswahl der Datenbank fehlgeschlagen");
    
    		// create initial table containing only one column
    
    		$tablename =  $pSegment . "_" . $pMaxX ."_" . $pSlice . "_" . $pMaxY . "_" . $pMatID;
    
    		$queryCreateTable = "create table ". $tablename . "(slice varchar(10));";
    				  
    		mysql_query($queryCreateTable) or die("Anfrage fehlgeschlagen create table query: ".mysql_error());
    
    		
    		// add the other columns
    		
    		foreach ($namesOfCols as $col) {
    		
    			$queryAddColumn = "alter table " . $tablename . " add column " . $col . " float" . ";";
    			$queryAddColumnResult = mysql_query($queryAddColumn)
    						  or die("Anfrage fehlgeschlagen addcol: ".mysql_error());					
    		}
    		
    		
    		// fill in the rows for the slices
    		
    		foreach ($namesOfRows as $row) {
    		
    			$queryAddRow = "insert into " . $tablename . "(slice) values(' " . $row . "')" . ";";
    			$queryAddRowResult = mysql_query($queryAddRow)
    						  or die("Anfrage fehlgeschlagen addrow: ".mysql_error());					
    		}
    		
    
    		mysql_close($dbConn);
    
    	}
    }
    diese funktion rufe ich nun wie folgt auf:

    Code:
    /*				Script BEGIN				*/
    
    list ($segment, $maxX, $slice, $maxY, $matID) = array ("seg", 20, "sli", 20, 5678);
    
    echo "creating tables...\n";
    
    $result = createMatrixTable($segment, $maxX, $slice, $maxY, $matID);
    
    echo "database tables created!\n";
    
    /*				Script END				*/
    
    
    ?>
    das merkwürdige ist nun:
    beim ersten aufruf der funktion läuft alles sauber durch und es wird eine neue tabelle angelegt. rufe ich nun die funktion noch einmal auf mit anderen parametern (= anderer tabellenname der zu erzeugenden tabelle) erhalte ich die fehlermeldung:

    Anfrage fehlgeschlagen create table query: Table 'seg_20_sli_21_1234' already exists
    die tabelle wird aber trotzdem angelegt und darüberhinaus auch noch so initialisiert wie im script (obwohl dieser initialisierungsteil erst nach dem create table statement passiert)......

    deshalb meine fragen:

    1. warum die fehlermeldung? keine von den tabellen gab es vorher....
    2. warum wird dann die tabelle trotz fehlermeldung angelegt?
    3. warum tut "or die()" nicht das was es sollte bzw. was ich von ihm erwarte?
    "or die" heisst doch das sich das script beenden soll, dies ist hier aber nicht der fall da ja auch noch alle statements nach dem erzeugen der tabelle ausgeführt werden, das script beendet sich also nicht.........

    danke für alle tips im voraus.........


  • #2
    Es hört sich dann wohl eher so an, als würde ich Funktion versehentlich 2x ausgeführt. Denn wenn die Tabelle vorher nicht existierte, später aber doch und trotzdem diese Fehlermeldung kommt, kann es eigentlich nur das sein...

    Kommentar


    • #3
      Soetwas in der Art muss es wohl sein.
      Table 'seg_20_sli_21_1234' already exists
      Da irrt sich mysql in 100 von 100 Fällen nicht.

      Kommentar


      • #4
        Da irrt sich mysql in 100 von 100 Fällen nicht.
        hmmm, da bin ich mir nicht so sicher......

        mache ich ein

        Code:
        show tables
        krieg ich :

        Code:
        Empty set (0.00 sec)
        rufe ich die funktion jetzt so auf:



        Code:
        list ($segment, $maxX, $slice, $maxY, $matID) = array ("seg", 21, "sli", 21, 1234);
        
        $result = createMatrixTable($segment, $maxX, $slice, $maxY, $matID);
        läuft das script durch, ein

        Code:
        show tables
        zeigt mir :


        Code:
        Tables_in_test     |
        +--------------------+
        | seg_21_sli_21_1234 |
        +--------------------+
        1 row in set (0.00 sec)
        rufe ich jetzt die funktion ein zweites mal mit geänderten parametern so auf:

        Code:
        list ($segment, $maxX, $slice, $maxY, $matID) = array ("seg", 11, "sli", 11, 1234);
        
        $result = createMatrixTable($segment, $maxX, $slice, $maxY, $matID);
        krieg ich:

        Code:
        Anfrage fehlgeschlagen create table query: Table 'seg_11_sli_11_1234' already exists
        aber

        Code:
        show tables
        sagt

        Code:
        | Tables_in_test     |
        +--------------------+
        | seg_11_sli_11_1234 |
        | seg_21_sli_21_1234 |
        +--------------------+
        2 rows in set (0.00 sec)
        irgendwelche ideen?

        Kommentar


        • #5
          Ist das oben dein komplettes Script?

          Und was soll eigentlich:

          Code:
          list ($segment, $maxX, $slice, $maxY, $matID) = array ("seg", 21, "sli", 21, 1234);
          $result = createMatrixTable($segment, $maxX, $slice, $maxY, $matID);
          Abgesehen davon frage ich mich manchmal, ob ich Legasteniker bin:
          Es hört sich dann wohl eher so an, als würde ich Funktion versehentlich 2x ausgeführt.
          *hmpf*

          http://www.lugbz.org/documents/smart...l#dontclaimbug

          Kommentar


          • #6
            Und was soll eigentlich:

            Code:

            list ($segment, $maxX, $slice, $maxY, $matID) = array ("seg", 21, "sli", 21, 1234);
            $result = createMatrixTable($segment, $maxX, $slice, $maxY, $matID);
            ja, mir ist schon klar das ich die auch direkt hätte übergeben können........

            ja, das ist das komplette sript, und ich seh einfach nix was diese fehlermeldung verursachen könnte............hab jetzt mal nach bugs auf http://bugs.mysql.com geschaut aber da steht nichts was irgendwie mit diesem fehler zu tun hat.............

            meine mysql-version (client, server, dev-packages und shared-packages) ist 4.0.26 (nicht die gerade die aktuellste, aber ich hab auf arbeit gerade nicht die wahl da alle mit der vierer-version entwickeln.......)

            mir bleibt dieser fehler rätselhaft und ich sehe keinen stelle an der mir ein fehler meinerseits ins auge stechen würde............

            noch irgendwelche ideen?

            Kommentar


            • #7
              Debugger installieren und nachvollziehen.
              Wahlweise als Anfang das Skript mit Debug-Ausgaben versehen, zB
              PHP-Code:
              <?

              error_reporting(E_ALL); ini_set('display_errors', true);

              function createMatrixTable($pSegment, $pMaxX, $pSlice, $pMaxY, $pMatID) {

                  echo '<pre>Debug: ', print_r(debug_backtrace(),true), '</pre>'; // php >= 4.3.0
                 // function vars

                 define("DBName", "test");
                 define("DBServer", "localhost");
                 define("DBUser", "htbase");
                 define("DBPasswd", "reichtum");
              ...

              Kommentar


              • #8
                Lass dir im Script halt alle paar Zeilen ausgeben, welche Tabellen schon existieren. echo-Debuggen halt... Ich bin mir fast sicher, der Fehler liegt bei dir!

                Kommentar

                Lädt...
                X