Vit lista
Din kod i sin nuvarande form är mycket farlig, inte bara tillåter du användaren att bestämma vilka fält som ska väljas utan du låter honom också bestämma vilka tabeller den ska fråga efter. Du bör definitivt utföra en vitlistakontroll på dessa. t.ex.:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
På samma sätt bör du validera fältlistorna. Men validering av fältlista kommer att bli ganska komplicerad eftersom dina fält kommer att vara beroende av tabellen. Jag föreslår att du skapar arrayer och kontrollerar att urvalet finns i det.
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
Förberedda uttalanden
Som du vet kan förberedda satser endast användas för att binda parametrar. De kan inte användas för att fylla i tabellnamn och kolumnnamn. Det är därför du behöver både förberedda uttalanden och vitlista. Jag rekommenderar att du använder PDO . Det kan se ut ungefär som
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));