ホワイトリスト
現在の形式のコードは非常に危険です。ユーザーが選択するフィールドを決定できるだけでなく、クエリを実行するテーブルをユーザーが決定できるようにします。これらについては、必ずホワイトリストチェックを実行する必要があります。例:
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'));