Andreas Görtz: Neuer Artikel: Kontextwechsel erkennen und behandeln

Beitrag lesen

Hi dedlfix,

beide Vorgehen haben auf 32-Bit-Systemen das Problem eines zu geringen Wertebereichs.

Haben? Können haben, müssen aber nicht. Außerdem kommt es auch noch auf den Feldtyp im DBMS an.

Natürlich müssen sie das nicht. Aber es kann ja nicht schaden, dem Problem, ungeachtet dessen, dass es in der Praxis nicht auftreten sollte, generell aus dem Weg zu gehen. Oder zumindest darauf aufmerksam zu machen, dass das Problem existieren kann.

Wer INT verwendet hat dieses Problem nicht.

Doch - das Problem kann bereits bei UNSIGNED INT auftreten, zumindest unter MySQL und mit der hier vorgeschlagenen Nutzung von %d als sprintf()-Platzhalter bzw. intval().

Daher würde ich an dieser Stelle
$sql = sprintf("SELECT feldliste FROM tabelle WHERE feld='%s'", mysql_real_escape_string($zahl));
favorisieren.

Ja, wenn es notwendig ist, aber pauschal findet das nicht meine Unterstützung. (Meine Devise: Nachdenken vor Nachmachen. - "Das hab ich schon immer so gemacht" ist nicht immer der beste Ratgeber.)

Wo siehst du denn hier eine Pauschalität? Ich habe doch zwei Argumente genannt - sind die deiner Meinung nach beide so abwegig? Oder anders gefragt: welchen Vorteil versprichst du dir von der integer-Variante, oder welchen Nachteil siehst du in der String-Version?

noch was: durch die Umwandlung nach Integer handelt man sich möglicherweise Probleme bei Fehleingaben ein. Steht in $zahl z.B. "1foo", wird das durch intval() nach 1 umgewandelt, wodurch alle Datensätze, wo feld 1 entspricht, zurückgegeben werden, was für den gemeinen Nutzer nicht unbedingt nachvollziehbar ist. Eine zusätzliche Prüfung wäre hier nötig.

Das hat nicht direkt was mit dem Kontext zu tun, sondern ist Aufgabe einer fachlichen Prüfung. Ebenso wie Berechtigungsprüfungen sind Wertebereichsprüfungen gemäß fachlicher Anforderungen notwendig, die im Vorfeld erledigt werden müssen/sollten.

das Problem ist, dass eine Nutzereingabe durch intval() ggf. verändert wird. Wenn man auf eine fachliche Prüfung verzichten kann, bzw. es keine fachliche Prüfung gibt, z.B. im Falle von Suchanfragen, ist das eher hinderlich. Daher ist es meiner Meinung nach falsch, Nutzereingaben pauschal in Zahlenwerte zu konvertieren, auch dann, wenn man Zahlenwerte erwartet.

Gruß,
Andreas.