Mailinglisten-Archive |
Hallo AA, Am Donnerstag, 9. November 2006 16:36 schrieb AA: > gravierender denkfehler? hast du schonmal versucht den typ int über > ein formular zu versenden? alles was darüber ankommt ist vom typ > "string" und muss entsprechend gecastet und/oder geprüft werden vor > der speicherung. in der Theorie ja. :-) In der Praxis gibt es aber das Type-Juggling von PHP, und ich wette, daß viele sich daher nicht bewußt mit dem Casting beschäftigen. Das habe ich am Anfang auch nicht gemacht... ;-) Und der Haken ist eben: Das Formular sendet die Daten als Zeichenkette - und im Query-String werden sie im Prinzip auch als Zeichenkette eingebaut. Wenn jemand in PHP dazwischen nicht prüft und castet, fällt das eben nicht weiter auf. > und wenn ich ein integer in die datenbank einfüge, dann füge ich ein > integer ein und keinen string, den ich escapen muss. Gut, ich verwende ja Prepared Statements, alternativ könnte man auch mit sprintf() arbeiten - diesen Klasse-Tip habe ich mal hier auf der Liste aufgeschnappt :-) -, aber in irgendeiner Form behandele ich immer auch die Zahlenwerte - auch wenn das dumm klingen mag. Es kann nämlich trotzallem sein, daß irgendwo etwas durchrutscht. Spätestens dort, wo ich dann "escape", sprintf() oder Prepared Statements verwende, wird das Ganze dann aber auf die eine oder ander Weise abgefangen. > bei meinen > ausführungen wolle ich keine abhandlung über typen schreiben oder ein > anfängerhandbuch, sondern habe mich darauf verlassen, dass die > mitlesenden sehr wohl zwischen einem string und int o.ä. > unterscheiden können. Da hier auch viele Anfänger auf der Liste sind, Anfänger das oft noch nicht können - das konnte ich als Anfänger auch nicht -, finde ich es wichtig, daß man diese Details nicht ganz wegläßt. So haben Anfänger eine bessere Chance, durch das Mitlesen auf der Liste schneller zu lernen. Das ist aber nur meine persönliche Meinung. :-) > zu deinen bemerkungen bezügl. prepared statements: > -------------------------------------------------- > ich wollte dir mit meinem hinweis keinesfalls auf die füsse treten. Bist Du auch nicht. :-) Alles im tiefgrünen Bereich. ;-) > ich bezog mich auf prepared statement anweisungen der > mysqli-erweiterung. das wurde ja hier erwähnt als möglichkeit. > ich meine, es ist gestattet, darauf hinzuweisen, dass dies keine > wirkliche lösung ist, sondern für den einzelfall ausreichend. Dann bezieht sich der Einwand aber auf die Verwendung der MySQLi-Erweiterung und richtet sich nicht gegen die Verwendung von Prepared Statements, wenn ich Dich jetzt richtig verstehe. ;-) > wer > heute komplexe anwendungen basierend auf der mysqli-erweiterung > schreibt (zb. ich *g*), der wird es morgen schwer haben, dies mal > eben zu portieren, weil eben einige mysqli-anweisungen so speziell > auf mysql zugeschnitten sind, dass man das nicht eben mal so > austauschen kann. auch nicht mit PDO (siehe zb. mysqli_field_seek() > u.v.a. spielereien, die ich nicht missen möchte). Ok, klar. Ich hatte hier auch mal eine Diskussion zur Portabilität angestoßen, und da kam von einem Teilnehmer der letztendlich zutreffende Einwand, daß man sich irgendwo auch mal festlegen müsse. Wenn man mit PHP programmiere, wäre das ja auch so eine Entscheidung. Und ich finde, da ist etwas sehr Wahres dran. Es gibt mit Sicherheit Anwendungen, die möglichst portabel sein sollten, was die Datenbank angeht, ich würde aber mal sagen, daß die meisten PHP-Anwendungen eine MySQL-Datenbank verwenden und das auch so bleiben wird. Ich habe mir auch jahrelang darüber den Kopf zerbrochen, was wäre, wenn ich für meine Website mal eine andere Datenbank verwenden wollte. Naja, die Erfahrung ist, ich habe meine Website schon ein paar Mal komplett neuprogrammiert. Geblieben ist nur die Datenbank: MySQL... ;-) Im Übrigen ist es so, daß wenn man seine Datenbank-Funktionen vernünftig kapselt, sogar problemlos die Datenbank-Erweiterung austauschen kann... ;-) > es ist müssig, darüber zu diskutieren, welches die *beste* variante > ist. es gibt nämlich keine. nur eben grundsätze, die zu beachten > sind. Genau. :-) Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive