Bílá nabídka
Váš kód ve své současné podobě je velmi nebezpečný, nejenže uživateli umožňujete rozhodnout, jaká pole by měla být vybrána, ale také mu umožňujete rozhodnout, na jaké tabulky se bude dotazovat. Určitě byste měli provést kontrolu bílé listiny. např.:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
Podobně byste měli ověřit seznamy polí. Ověření seznamu polí však bude poněkud komplikované, protože vaše pole budou záviset na tabulce. Navrhuji vytvořit pole a zkontrolovat, zda je v nich výběr.
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
Připravené výpisy
Jak víte, připravené příkazy lze použít pouze k navázání parametrů. Nelze je použít k vyplnění názvů tabulek a názvů sloupců. Proto potřebujete jak připravené výpisy, tak white listing. Doporučuji používat CHOP . Může to vypadat nějak takto
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));