Tach!
Wenn ich einer Klasse Zugriffsrechte auf bestimmte Tabellen vergeben möchte, halte ich das zunächst erstmal nicht für "irrsinning" sondern innerhalb eines bestimmten framesets sogar für sinnvoll.
Du kannst die Zugriffe auf das DBMS nicht innerhalb deiner Anwendung einschränken, egal ob Klasse oder irgendeine andere Codestruktur. Jeder, der in der Lage ist, in deinem System selbst geschriebenen Code auszuführen, und an die Zugangsdaten zum DBMS herankommt, kann beliebig Code zum Zugriff auf das DBMS schreiben, ohne deinen Code zu berücksichtigen oder gezwungen sein, nur über ihn zu gehen. Ihn schränken lediglich die mit diesen Zugangsdaten verbundenen und im DBMS vergebenen Rechte ein.
Das ganze Vorhaben ist also grundsätzlich nicht zielführend. Es sei denn, du schreibst eine Art Sandbox in PHP, die noch dazu ausbruchsicher ist.
In dem Fall hat das wohl auch eher weniger mit dem Schutz vor SQL-Injection zu tun. Da habe ich mich wohl sehr ungeschickt ausgedrückt. In dem Fall geht es eher um die allgemeine Zugriffsberechtigung auf bestimmte Tabellen.
Was nützt es, wenn du lediglich den Beginn eines SQL-Statements prüfst und hintendran beliebiger weiterer Code angehängt werden kann? Da bremst den Ausführenden lediglich die in PHP und MySQL enthaltene Einschränkung, keine zwei (und mehr) Statements in einem Aufruf zu gestatten. Wohlgmerkt "bremst", nicht "hindert", denn zum Beispiel SELECTs kann man wunderbar mit UNION erweitern, DELETEs kann man zu Multi-Table-Delets ausbauen, mit UPDATE kann man über eine zu allgemeine Bedingung alle Datensätze gleichsetzen und wenn man INSERT mit SELECT erweitert, kann man deine Tabelle/Festplatte zum Überlaufen bringen.
Ich löse es jetzt so, dass ich eine eigene select-Funktion schreibe welche vor der prepare-Funktion aufgerufen werden muss.
Darin müsstest du dir einen ausgewachsenen SQL-Codeparser schreiben. Das ist für den angestrebten Nutzen ein zu hoher Aufwand, der noch dazu das eingangs erwähnte grundlegende Problem nicht lösen kann.
dedlfix.