dedlfix: PHP Oop Datenbank Klasse

Beitrag lesen

Tach!

Mir ist bewusst, dass es sicher noch Verbesserungspotenzial gibt aber seht selbst.

bindValues() brauchst du nicht. Da du sowieso nur Einzelstatements abarbeiten kannst und nicht einmal Preparieren und mehrfach Binden und Ausführen, kannst du die Parameter als Array dem execute() übergeben.

prepareQuery() würde ich separieren für die einzelnen Typen. Lediglich die Where-Klauselerzeugung ist allen gleich, die kann in eine eigene Methode. So wie du es jetzt hast, lassen sich ungültige Statements erzeugen (INSERT mit LIMIT). UPDATE kann zwar auch LIMIT, aber das nimmt man da wohl eher nicht. Statt Schleife zum Zusammenstellen der Feld-/Parameterliste mit anschließendem Entfernen überflüssiger Verkettungsoperatoren kannst du implode() nehmen.

Dann noch einmal kurz auf die Sicherheit. Escapen bzw die übergebenen Daten behandeln damit eine Injection nicht möglich ist, brauchte ich bei PDO nicht mehr, richtig?

Wenn du das Prinzip verstanden hast, beantwortet sich diese Frage von selbst. Warum muss man denn maskieren? Weil man Bezeichner und Werte in die Query einfügt und dabei die Begrenzungszeichen beachten muss, damit eine gültige Syntax entsteht und nicht ein unmaskiertes Begrenzungszeichen in einem Bezeichner oder Wert die Query kaputtmacht. Bei Prepared Statements geht die Query separat auf Reisen. Die Werte werden in einem zweiten Schritt verarbeitet. Dabei übergibst du die Werte in Rohform, also nicht wie im Statement als Literal (Stringdarstellung der Werte). Für den sicheren Transport sorgt die API. Deshalb ist da kein Maskieren notwendig. Du musst aber sehr wohl maskieren, wenn du Bezeichner einfügst. Die sind vom Prepared-Statement-Mechanismus nicht betroffen. Auch Stellen wie das LIMIT sind weiterhin zu beachten.

dedlfix.