PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [MySQL] Mysql Field Table Problem.



Blakkeight
22.02.2007, 16:37
Tag liebes WebDev Forum.

Ich hab mal wieder ein Problem, diesmal dreht es sich um MySQL.
Genauer um den Befehl mysql_field_table ( resource Ergebnis-Kennung, int Feldoffset ), ich kann mir nicht erklaeren was ich falsch mache.

Ich bekomme wenn ich diese Funktion:

function mysql_error_log($mysql_request,$list){
$field_table = mysql_field_table($mysql_request, 1);
$error_msg = MYSQL_ERROR_TABLE.": ".$field_table." </br>\n".MYSQL_ERROR_NR.": ".mysql_errno()." - ".mysql_error()." | ".date("d.M.Y - h:i:s A")." </br>\n";
if($list == 0) @$file = fopen("moaa/mysql_error_log.txt","a+") or die(FILE_OPEN_ERROR."!");
elseif($list == 1) @$file = fopen("mysql_error_log.txt","a+") or die(FILE_OPEN_ERROR."!");
fwrite($file, $error_msg);
fclose($file);
return die(MYSQL_ERROR."!");
}
aufrufe, diese Fehlermeldung:

Warning: mysql_field_table(): supplied argument is not a valid MySQL result resource in D:\Programme\xampp\htdocs\xampp\WebDev\_mocms\moaa\function.php on line 7 Ok sie hat ein nicht Valides MySQL Argument, trotzdem weiß ich nicht was ich daran veraendern kann/muss damit es geht. =)
Und so frage ich die Funktion ab, der Inhalt der MySQL query() abfrage ist bewusst Fehlerhaft, da ich die oben genannt Funktion Testen will. ;)

$query = "SELECT * FRM tabelle ORDER BY ID DESC;";
$sql = @mysql_query($query);
if(!$sql) mysql_error_log($sql, 0);

Hoffe ihr koennt mir Helfen. =)

mitaki
22.02.2007, 21:27
Wenn deine Abfrage Fehlerhaft ist, liefert mysql_query() keine Ergebniskennung zurück. $sql kann also nicht als Variable für mysql_field_table() (http://de2.php.net/mysql_field_table) verwendet werden.

Außerdem weiß ich nicht, was du mit der 1 bezwecken willst, ist das tatsächlich der Name einer Spalte?

Blakkeight
22.02.2007, 23:54
Wenn deine Abfrage Fehlerhaft ist, liefert mysql_query() keine Ergebniskennung zurück. $sql kann also nicht als Variable für mysql_field_table() verwendet werden.
Hm irgendwie hab ich nen Brett vorm Kopf, ich versteh zwar was du meinst aber ich kann mir keine Loesung daraus reimen. ,(


Außerdem weiß ich nicht, was du mit der 1 bezwecken willst, ist das tatsächlich der Name einer Spalte?

Das ist der Feldindex der Tabelle, koennte also auch 0 da stehen.
Quelle: mysql_field_table() (http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_field_table.php)

Manni
23.02.2007, 06:53
Du kannst die Funktion so nicht benutzen, wenn eine Fehler auftritt (Was ja immer der Fall ist, wenn du die Funktion aufrufst) $mysql_request ist immer null, weil die Query fehlgeschlagen ist. Dementsprechend kommst du auch nicht an den Tabellennamen ran, da die Query (zumindest ist das meistens der Grund) einen Syntaxfehler enthält - wie soll MySQL da verstehen, auf wleche Tabelle du zugreifen wolltest?

Blakkeight
23.02.2007, 09:58
OK gut jetzt leuchtet es nen bischen ein.

Hm was gibt es denn noch fuer moeglichkeiten Wichtige Infos bei einem Datenbank Fehler in eine Log zu schreiben?

drunken monkey
23.02.2007, 11:24
Hm was gibt es denn noch fuer moeglichkeiten Wichtige Infos bei einem Datenbank Fehler in eine Log zu schreiben?
Wie meinst du das bitte? o_O Bzw. warum brauchst du mysql_field_table () für einen Errorlog? o_O''

Du brauchst doch einfach nur bei einem Datenbankfehler z.B. die Query, den von MySQL gelieferten Fehler und am besten auch noch einen Timestamp an irgendeine Datei anhängen.

Beispiel:

function db_error ($query, $db) {
$log = $query . '::';
if ($db != null)
$log .= mysql_error ($db) . '::';
else
$log .= '::';
$log .= time () . "\n";
$file = fopen ('adminbereich/errorlog.txt', 'a+');
fwrite ($file, $log);
fclose ($file);
// Optional, falls bei DB-Fehler das
// Skript abgebrochen werden soll:
die ('Ein Datenbankfehler ist aufgetreten. Bitte versuche es später nochmals!');
}


// Aufruf wäre dann so:
// ...
$query = 'SELECT ...';
$result = mysql_query ($query, $db) or db_error ($query, $db);

Blakkeight
23.02.2007, 11:33
lol stimmt eigentlich, werds gleich mal ausprobieren. ;)

e;

function mysql_error_log($mysql_query,$list){
$error_msg = MYSQL_ERROR_NR.":</br>\n&nbsp;".mysql_errno()." - ".mysql_error()." | ".date("d.M.Y - h:i:s A")." </br>\n".MYSQL_ERROR_QUERY.":</br>\n&nbsp;".$mysql_query." <hr noshade=\"noshade\">\n";
if($list == 0) @$file = fopen("moaa/mysql_error_log.txt","a+") or die(FILE_OPEN_ERROR."!");
elseif($list == 1) @$file = fopen("mysql_error_log.txt","a+") or die(FILE_OPEN_ERROR."!");
fwrite($file, $error_msg);
fclose($file);
return die(MYSQL_ERROR."!");
}
So hab ich es jetzt geloest. ;)
Danke an alle fuer die Hilfe. =)