Abschalten einer Fehlermeldung
Marc
- datenbank
0 Cheatah0 roox0 Sönke Tesch0 Marc
Hallo,
ich habe da ein Problem.
Ich programmiere eine Auswahl, in der es möglich ist eine ID-Nummer einzugeben um schneller an einen Datensatz heranzukommen. Ist auch alles Sahnemässig gelaufen! (Zeigt alles richtig an) usw.
NUR: Wenn jetzt eine Nummer eingegeben wird, die es nicht gibt. Wird ja eine Fehlermeldung zurückgegeben (is ja normal, weil nicht da!) Wie unterdrücke ich diese Fehlermeldung die von der Datenbank zurückkommt!
Ich hab mal den Fehler dazu geschrieben und die Programierung.
Wäre echt nett, wenn mir jemand sagen könnte, wie ich diesen Fehler abdrehen kann!
Datensatz ist nicht in der Datenbank vorhanden!
Fehler: Unknown column 'e14000' in 'where clause'
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Programme\Apache Group\Apache2\htdocs\richter\auswahl.php on line 235
//5. Abfrage der Auswahl
if ($com!="0"){
echo "5.1. If-Anweisung";
$result=mysql_query("select * from stapler where com=$com order by tragkraft, baujahr");
if (!$result) {
echo "<b>Datensatz nicht in der Datenbank vorhanden!<b>";
}
}
Danke!
Hi,
NUR: Wenn jetzt eine Nummer eingegeben wird, die es nicht gibt. Wird ja eine Fehlermeldung zurückgegeben (is ja normal, weil nicht da!)
nein, es ist nicht normal, wenn die Datenbank einen Fehler liefert. Das Resultset sollte einfach leer sein, mehr nicht. Ein Fehler kann höchstens durch falsche Verwendung der Schnittstelle seitens Deiner Programmlogik auftreten.
Datensatz ist nicht in der Datenbank vorhanden!
Fehler: Unknown column 'e14000' in 'where clause'
Warning: mysql_fetch_object(): [...]
Die Reihenfolge ist bezeichnend: Erst stellst Du fest, dass das Resultset leer ist, dann versuchst Du trotzdem, es weiterzuverwenden. Unterlasse letzteres einfach, und alles wird gut.
Cheatah
Hallo
Bei PHP "error_reporting(0);" eingeben oder einfach keine Fehler machen
gruß roox
NUR: Wenn jetzt eine Nummer eingegeben wird, die es nicht gibt. Wird ja eine Fehlermeldung zurückgegeben (is ja normal, weil nicht da!) Wie unterdrücke ich diese Fehlermeldung die von der Datenbank zurückkommt!
Gar nicht, denn Fehlermeldungen sind dazu da, gelesen zu werden. Davon mal abgesehen: Wenn kein passender Datensatz gefunden wird, gibt die Datenbank keinen Fehler zurück, sondern ein leeres Ergebnis - das ist ein Unterschied.
$result=mysql_query("select * from stapler where com=$com order by tragkraft, baujahr");
if (!$result) {
echo "<b>Datensatz nicht in der Datenbank vorhanden!<b>";
}
Datensatz ist nicht in der Datenbank vorhanden!
Wie eben beschrieben ist das die falsche Schlussfolgerung. Ist $result false, liegt ein Fehler in Deinem SQL-Befehl vor. Wäre kein Datensatz vorhanden, würde $result ein Ergebnis enthalten, für das mysql_num_rows() 0 bzw. mysql_fetch_row() false zurückgibt, also ein leeres Ergebnis.
Fehler: Unknown column 'e14000' in 'where clause'
Diesen Fehler gibst Du im obigen Code nicht aus. Ich gehe aber mal davon aus, daß das "e14000" in $com steht, damit sieht Dein SQL-Befehl so aus:
select * from stapler where com=e14000 order by tragkraft, baujahr
Daß das nicht passen kann, sollte Dir eigentlich klar sein. Falls nicht: Wenn Du eine Zeichenkette vergleichen willst, gib auch eine Zeichenkette an (mit Anführungszeichen). Im Moment vergleichst Du da nur die Spalte com mit der (nicht existierenden) Spalte e14000 - daher auch der Fehler.
Weiterhin wäre es mehr als ratsam, Daten, die von außen kommen, mittels mysql_escape_string() gegen Manipulationen abzusichern.
Alles in allem müßte es so aussehen:
$result = mysql_query("select * from stapler where com="".mysql_escape_string($com)."" order by tragkraft, baujahr");
if (!$result) {
echo "Fehler: ".mysql_error();
}
else {
while ($row = mysql_fetch_xxx($result) {
// Datensatz $row ausgeben
}
}
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Programme\Apache Group\Apache2\htdocs\richter\auswahl.php on line 235
Auch mysql_fetch_object() taucht in Deinem Code nicht auf. Nichtsdestotrotz solltest Du $result nicht benutzen, wenn da nichts drin ist (außer dem Wert false).
Gruß,
soenk.e
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Programme\Apache Group\Apache2\htdocs\richter\auswahl.php on line 235
Auch mysql_fetch_object() taucht in Deinem Code nicht auf. Nichtsdestotrotz solltest Du $result nicht benutzen, wenn da nichts drin ist (außer dem Wert false).
Gruß,
soenk.e
Danke!
Bekomme jetzt keinen Fehler mehr!
Allerdings kann ich keinen Text anzeigen lassen z.B. "Datensatz nicht gefunden". Hab mir den $result mal ausgeben lassen und der war weder false noch 0. sondern: "Resource id #2"
irgentwie verstehe ich nicht, wie der auf 2 kommt! Auch eine andere Abfrage die ich da habe gibt den gleichen Wert zurück! (Jene wird korrekt ausgeführt! soll heissen ich hab da mal nicht gemurkst:)) ).
Grüße
Marc
Allerdings kann ich keinen Text anzeigen lassen z.B. "Datensatz nicht gefunden".
mysql_num_rows() ist Dein Freund. Siehe PHP-Anleitung.
Hab mir den $result mal ausgeben lassen und der war weder false noch 0. sondern: "Resource id #2"
$result kannst Du nicht ausgeben lassen bzw. es macht keinen Sinn, weil das, was (im Erfolgsfall) in $result drin ist, weder ein Text noch eine Zahl ist, sondern eine interne MySQL-Datenstruktur - eben eine Resource. Der einzige Weg, damit zu arbeiten, sind die dafür vorgesehenen mysql_...-Funktionen.
PHP ist leider zu dusselig um eine vernünftige Typenkontrolle zu ermöglichen, deshalb bekommst Du obigen Text ausgespuckt.
irgentwie verstehe ich nicht, wie der auf 2 kommt!
Offenbar hast Du vorher bereits eine Resource Nummer 1 erzeugen lassen, ganz einfach. Aber wie bereits angedeutet: Diese Information ist für Dich vollkommen ohne Belang.
Wichtig ist nur, daß mysql_query() entweder eine MySQL-Resource ausspuckt (die wiederum keine oder mehr Daten enthält) oder, falls etwas schief gegangen ist, den Boolschen Wert false.
Gruß,
soenk.e