Fehlermeldung von MySQL abfangen
|
Seitenanfang |
Hi, ich hab in einem CGi-Skript eine Textarea definiert, in der ein Benutzer einen SQL-Befehl eingeben kann, der dann mit param() aufgefangen wird und über ein prepare() ausgeführt wird. Wenn der Benutzer jetzt eine falsche Eingabe macht (was ja recht häufig vorkommen sollte...) gibt ja MySQL eine Fehlermeldung zurück. Wie kann ich diese abfangen und auf den Bildschirm bringen? Ich hab das prepare() schonmal in einen eval{} Block geschrieben, was zur folge hat, dass sich das Skript nicht aufhängt, aber eine Fehlermeldung wird nich zurückgegeben. Warum?eval{ $ausfuehren=$dbh->prepare("$query") ; 1; } or do { fehler( $q, $@ || "falscher SQL-Befehl"); };
Datum: 19.01.2007-10:10

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
| Wenn ein SQL Statement fehlerhaft ist, dann wird automatisch der DBI Fehlerstring gesetzt. Eine mögliche Abfrage, die nach jedem ausgeführten Statement erfolgen sollte: if ( $DBI::errstr ) { print "Das SQL Statement ist fehlerhaft: $DBI::errstr \n"; } Problem dürfte könnte sein (je nachdem wo das eingesetzt wird), das dieser Fehlerstring ausschließlich in Englisch daher kommt. Sollte da jemand etwas anderes wissen, wäre ich dran interessiert. :) Grüße Mario
Datum: 22.01.2007-18:45

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
| Danke für die Antwort, aber damit hats leider auch nicht geklappt, bei einer falschen SQL-Query hängt er sich immernoch auf, dh. er spricht weder auf das if ( $DBI::errstr ) noch auf if (!$query) noch auf if (!$query->execute) an... Vll noch ne Idee? ;-)
Datum: 25.01.2007-08:12

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
| Probiere es doch mal ohne eval: $ausfuehren = $dbh->prepare("$query"); if ( $DBI::errstr ) { print "Error: $DBI::errstr.\n"; } Beim prepare wird das statement schon geprüft, meine ich. $ausführen->execute; if ( $DBI::errstr ) { print "Error: $DBI::errstr.\n"; } Beim execute kann natürlich, trotzdem das query ok ist, auch noch was schieflaufen. Grüsse Mario
Datum: 25.01.2007-11:25

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
| Sorry aber das selbe Ergebnis wie immer... nüscht Trotzdem Danke Gunther
Datum: 28.01.2007-01:37

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
| die query muß dann irgendwo vorher stehen: eval{ $sth = $dbh->prepare($insert) or die $dbh->errstr(); $sth->execute or die $dbh->errstr(); 1; };
Datum: 29.01.2007-10:04

|
re: Fehlermeldung von MySQL abfangen
|
Seitenanfang |
Danke für die Antwort, hat zwar nicht ganz geklappt, da nach dem "die" direkt abgebrochen wurde, aber es war der richtige Ansatz. So hat's jetzt hingehauen:
eval{ $ausfuehren = $dbh->prepare($query) or die $dbh->errstr(); $ausfuehren->execute or die $dbh->errstr(); print "Ihr Befehl: '$query' konnte ausgeführt werden"; 1; } or do{print "<h1>MYSQL hat folgenden Fehler zurückgegeben: </h1><br>"; print $dbh->errstr(); };
Datum: 30.01.2007-15:04

|