Hvid liste
Din kode i dens nuværende form er meget farlig, ikke kun giver du brugeren mulighed for at bestemme hvilke felter der skal vælges, men du tillader ham også at bestemme hvilke tabeller der skal forespørges på. Du bør helt sikkert foretage hvidlistekontrol af disse. f.eks.:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
På samme måde bør du validere feltlisterne. Men validering af feltliste vil være ret kompliceret, fordi dine felter vil være afhængige af tabellen. Jeg foreslår at oprette arrays og kontrollere, at markeringen er i den.
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
Forberedte erklæringer
Som du ved, kan forberedte udsagn kun bruges til at binde parametre. De kan ikke bruges til at udfylde tabelnavne og kolonnenavne. Derfor har du brug for både forberedte erklæringer og hvidliste. Jeg anbefaler at bruge PDO . Det kan ligne
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));