perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 12:34

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFehlermeldung 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: Fehlermeldung von MySQL abfangen
Seitenanfang
Sorry aber das selbe Ergebnis wie immer... nüscht

Trotzdem Danke

Gunther

Datum: 28.01.2007-01:37

Beitragre: 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

Beitragre: 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

-






-
-