Это на самом деле не работает так, как я написал.
Я просто код, как:
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;
Просто позаботьтесь об имени таблицы, оно не должно заменяться заполнителем. Так что @preparedstmt должен быть сгенерирован методом concat для создания оператора, который просто заменяет параметры в условиях заполнителем, но не Имя таблицы.