Entonces tu problema es lo que decía en la primer opción, que no sabes cómo recibir la información de que campos quiere el usuario y a partir de ahí armar la consulta.
Si tienes un select múltiple y se llama por ejemplo campos:
Los vas a recibir como un arreglo así:
y podrías recorrerlo:
Código PHP:
Ver originalforeach($_POST["campos"] as $n=>$campo)
$consulta[]="$campo VARCHAR(20)";
Luego hacer
y finalmente:
Si todos los campos van a tener el mismo tamaño no habría problema, pero si vas a crear una tabla "espejo" respetando el tipo y tamaño de cada campo, tendrías que analizar campo por campo de qué tipo es y qué tamaño tiene para duplicarlo.