hi,
ich hab ne funktion die eine datenbanktabelle entsprechend der übergegebenen parameter initialisiert, desweiteren setzt sich der tabellenname aus den übergegebenen parametern zusammen:
diese funktion rufe ich nun wie folgt auf:
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:
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.........
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); } }
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 */ ?>
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
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.........
Kommentar