Biała lista
Twój kod w obecnej formie jest bardzo niebezpieczny, nie tylko pozwalasz użytkownikowi zdecydować, które pola powinny zostać wybrane, ale także pozwalasz mu zdecydować, do jakich tabel ma wykonać zapytanie. Zdecydowanie powinieneś przeprowadzić w nich kontrolę białej listy. np.:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
Podobnie powinieneś sprawdzić poprawność list pól. Ale walidacja listy pól będzie dość skomplikowana, ponieważ twoje pola będą zależne od tabeli. Proponuję tworzyć tablice i sprawdzać, czy jest w nich zaznaczenie.
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
Przygotowane zestawienia
Jak wiesz, przygotowane instrukcje mogą być używane tylko do wiązania parametrów. Nie można ich używać do wypełniania nazw tabel i nazw kolumn. Dlatego potrzebujesz zarówno przygotowanych zestawień, jak i białej listy. Polecam używanie PDO . Może to wyglądać jak
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));