Você não pode substituir um nome de tabela por um
? em uma declaração preparada e, em seguida, faça com que o execute insira o nome da tabela. Nomes de tabelas dinâmicas geralmente são uma má ideia :é melhor fazer 1 tabela grande e adicionar uma coluna extra (indexada) para o "nome da tabela virtual".
Se você realmente precisa de tabelas dinâmicas, você terá que concatenar o nome da tabela no PREPARE em si.
Prós e contras de nomes de tabelas dinâmicas
Suponha que em vez de colocar todos os usuários dentro de uma tabela,
users com colunas ID , Name , e-mail , country , ... , você os coloca em tabelas dinâmicas, users_country , com colunas ID , Name , e-mail , ... -
Você não pode consultar facilmente todas as tabelas. Digamos que você queira saber quantos de seus usuários são do sexo masculino - você precisa consultar cada tabela e UNIR os resultados. Não será mais rápido.
-
Você pode dividir fisicamente as tabelas usando PARTITIONS de qualquer maneira, mas sua visão lógica ainda é a mesma. Qualquer vantagem que você acha que tem usando tabelas separadas geralmente pode ser obtida usando outro método.