La risposta breve alla tua domanda è "no".
In senso stretto, a livello di database, le istruzioni preparate consentono solo di vincolare i parametri ai bit "valori" dell'istruzione SQL.
Un modo di pensare a questo è "cose che possono essere sostituite durante l'esecuzione dell'istruzione in fase di esecuzione senza alterarne il significato". I nomi delle tabelle non sono uno di quei valori di runtime, in quanto determina la validità dell'istruzione SQL stessa (ad esempio, quali nomi di colonna sono validi) e la sua modifica al momento dell'esecuzione potrebbe potenzialmente alterare la validità dell'istruzione SQL.
A un livello leggermente superiore, anche nelle interfacce di database che emulano la sostituzione dei parametri delle istruzioni preparate piuttosto che inviare effettivamente istruzioni preparate al database, come PDO, che potrebbe plausibilmente consentire di utilizzare un segnaposto ovunque (poiché il segnaposto viene sostituito prima di essere inviato a il database in quei sistemi), il valore del segnaposto della tabella sarebbe una stringa e racchiuso come tale all'interno dell'SQL inviato al database, quindi SELECT * FROM ?
con mytable
poiché il parametro finirebbe effettivamente per inviare SELECT * FROM 'mytable'
al database, che non è SQL non valido.
La soluzione migliore è continuare con
SELECT * FROM {$mytable}
ma tu assolutamente dovrebbe avere una lista bianca di tabelle che controlli prima se quel $mytable
proviene dall'input dell'utente.