Hi!
Da bringst Du jetzt selber mehrere Dinge durcheinander.
Nö, ich fasste nur den Fokus enger als du.
Also erstmal sollte im Script, typischerweise in einem Elemetn von $_GET oder $_POST kein Literal mehr stehen, sondern ein Wert. PHP überträgt hier grundsätzlich nur den Datentyp "String".
Die Wandlung (Kontextbehandlung) für die Verwendung im Script hat bereits stattgefunden. Dennoch kann die Zeichenkette nun noch Zeichen enthalten, die nicht hineingehören (Stichwort: Magic Quotes).
Ja, aber den Teil haben wir schon hinter uns gelassen. Es geht darum, sie zu speichern und vorher noch zu ändern oder nicht.
Außerdem muss nun geprüft werden, ob der vorgesehene Zieltyp aus dem String-Wert ohne Fehler erzeugt werden kann. Wie genau hier "Fehler" zu definieren ist, hängt sicherlich auch vom Geschick der Umwandlungsfunktion ab.
Beispiel:
Aus dem String "08.02.1969" den String "19580208" zu machen, dürfte noch recht einfach sein.
[...]
Sowas stand für den vorliegenden Fall nicht zur Debatte.
(bei in '' eingefassten Strings) ist nur dann gemäß meiner Intention und aus Sicht des DBMS unverfälscht, wenn ich die Anführungszeichen um Welt maskiere. Ansonsten liest das DBMS nur Hallo und ein Leerzeichen, was nicht mehr der Benutzereingabe entspricht, also (unbeabsichtigt sicherlich) verändert wurde.
Eben diese Behandlung (Escaping) ist erst der nächste Schritt. Wenn ich die Datenbank über Blockpuffer mit Daten fülle, muss ich mit dem String gar nichts mehr nachen, wenn das DBMS den Datentyp String unterstützt (was normal wäre).
Warum sagst du nicht einfach Prepared Statements mit Databinding dazu? Ob da ein Blockpuffer oder sonstwas dahinter steht, ist weder relevant noch werden viele zu entziffern wissen, was du damit sagen willst. Prepared Statements dürften einige schon gehört haben und die anderen finden unter dem Begriff mehr zum Thema passende Literatur als zu "Blockpuffer".
Aber auch darum ging es nicht, weil implizit die Rede von herkömmlich zusammengestellten Statements war.
Wenn ich eine Zahl übergeben will, muss ich den die Zahl repräsentierenden String vorher noch in ein gültiges Zahlenformat umwandeln.
War auch grad nicht gefragt.
Erst bei der Übergabe an die nächste (Verarbeitungs-)Stufe (z.B. die Datenhaltung) müssen dann die berühmten Kontextwechsel beachtet werden...
Eben. Wenn Gunnar die Injections anspricht, meint er auch diesen Vorgang, nicht nur die vorherige Verarbeitung im Script.
Aber wir sollten nicht zwei Verarbeitungsschritte in einem zu Brei verarbeiten.
Hat er aber. Beziehungsweise er hat empfohlen, den ersten zu streichen und auf den zweiten hingewiesen. Und da gibt es den scheinbaren Widerspruch, dass die Daten verändert werden müssen, um unverändert anzukommen.
Lo!