Rolf B: PHP: Hochkomma für MySQL/MariaDB maskieren?

Beitrag lesen

Hallo Felix,

ich habe den Finger zweimal auf dem + gehabt, und zweimal auf dem -, am Ende also Neutral.

Plus: Eine saubere Trennung von Parametrierung und DB-Zugriff ist prima.

Plus: Du forderst Yadgar auf, sich mit Neuem zu befassen

Minus: Du gehst nicht auf die Umsetzung ein. Dein SQL Statement macht an der entscheidenden Stelle ein ... - wie wird params["search"] ins SQL eingebaut?

Minus: Du schlägst eine get-Methode vor, die es weder in MYSQLi noch in PDO gibt. Oder sie in in php.net nicht dokumentiert.

Dein Einwand, dass $stichwort eine mehrdeutige Semantik hat, ist je nach Kontext richtig oder falsch. In einer Riesenfunktion, die alles mögliche tut, hast Du recht. In einer Funktion, die genau diese Abfrage durchführt und weiter nichts, kann man das machen.


mysqli hat eine query-Methode, um SQL direkt auszuführen. Dann muss man aber die variablen Teile direkt ins SQL einsetzen und natürlich auch von Hand maskieren. Gleiches gilt für die query-Methode in PDO.

Eine eigengeschriebene get-Methode auf einem Objekt, dass mysqli kapselt oder davon abgeleitet ist, ist machbar. Sie müsste dann die benannten Parameter ins SQL Statement einsetzen. Das SQL muss dafür benannte Parametermarker enthalten.

Dann sollte man das aber nicht so machen, dass der Aufrufer die Maskierung durchführt. Statt dessen sollte die $param-Struktur den unmaskierten Wert und einen Wertetyp enthalten, und die get-Methode kümmert sich um Maskierung und das Einsetzen der Werte.

Es ist aber wenig sinnvoll, sowas selbst zu bauen. Dafür gibt's PDO, da ist das alles schon fertig vorhanden, wenn man prepared statements nutzt (die natürlich den Nachteil eines doppelten DB-Roundtrip haben). Allerdings wird auch da zwischen prepare und execute getrennt. Benannte Parameter in einem Rutsch in benannte SQL Platzhalter einzusetzen geht auch da nicht.

Rolf

--
sumpsi - posui - obstruxi