Kurze Antwort auf Ihre Frage ist "nein".
Genau genommen erlauben vorbereitete Anweisungen auf Datenbankebene nur das Binden von Parametern für "Werte"-Bits der SQL-Anweisung.
Eine Denkweise dafür ist "Dinge, die bei der Ausführung der Anweisung zur Laufzeit ersetzt werden können, ohne ihre Bedeutung zu ändern". Die Tabellennamen gehören nicht zu diesen Laufzeitwerten, da sie die Gültigkeit der SQL-Anweisung selbst bestimmen (dh welche Spaltennamen gültig sind) und eine Änderung zur Ausführungszeit möglicherweise ändern würde, ob die SQL-Anweisung gültig war.
Auf einer etwas höheren Ebene, sogar in Datenbankschnittstellen, die die Parameterersetzung vorbereiteter Anweisungen emulieren, anstatt vorbereitete Anweisungen tatsächlich an die Datenbank zu senden, wie z die Datenbank in diesen Systemen), wäre der Wert des Tabellenplatzhalters eine Zeichenfolge und als solche in das an die Datenbank gesendete SQL eingeschlossen, also SELECT * FROM ?
mit mytable
da der Parameter tatsächlich SELECT * FROM 'mytable'
senden würde an die Datenbank, die ungültiges SQL ist.
Am besten fahren Sie einfach mit
fortSELECT * FROM {$mytable}
aber Sie auf jeden Fall sollte eine weiße Liste von Tabellen haben, die Sie zuerst überprüfen, wenn diese $mytable
kommt von Benutzereingaben.