Бял списък
Вашият код в сегашната си форма е много опасен, не само позволявате на потребителя да реши кои полета да бъдат избрани, но също така му позволявате да реши към какви таблици да прави заявки. Определено трябва да извършите проверка на белия списък за тях. напр.:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
По същия начин трябва да потвърдите списъците с полета. Но проверката на списъка с полета ще бъде доста сложна, защото вашите полета ще зависят от таблицата. Предлагам да създадете масиви и да проверите дали селекцията е в тях.
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
Подготвени отчети
Както знаете, подготвените изрази могат да се използват само за свързване на параметри. Те не могат да се използват за попълване на имена на таблици и колони. Ето защо имате нужда както от подготвени отчети, така и от бял списък. Препоръчвам да използвате PDO . Може да изглежда нещо като
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));