In realtà non funziona come ho scritto. Scrivo solo codice come:
set @preparedstmt = concat('SELECT tid, LENGTH(message) len FROM ? where tid=? and first=1');
prepare stmt from prepared_stmt;
execute stmt using v_tid;
drop prepare stmt;
Prenditi cura del nome della tabella, non dovrebbe essere sostituito con il segnaposto. Quindi il @preparedstmt dovrebbe essere generato con il metodo concat per fare un'istruzione, che è semplicemente sostituita dai parametri nelle condizioni con un segnaposto, ma non il nome della tabella.