適切にエスケープするmysqli_stmt_bind_paramsを使用しているため、SQLインジェクションからすでに保護されています。
編集。データベースフレームワークに切り替えて、クリーンで美しいコードを作成できます。
そうでなければ...これはとても古いスパゲッティスタイルです...しかし私はそれが大好きです:D
未知の数のパラメーターを処理するようにコードを拡張するのは非常に簡単です。パラメータをループすると同時に、1。疑問符表記を使用してクエリ文字列を作成し、パラメータを配列に追加します。配列はmaxdb_stmt_bind_param(resource $ stmt、string $ types、array& $ var)。
したがって、このようになります。少なくとも1つのパラメーターが存在することを前提としています(ただし、これを回避するのは簡単です)。
$sql = "SELECT * FROM tbl_data WHERE ";
$and = '';
$types = '';
$parameters = array();
foreach($_POST as $k => $v) {
// check that $k is on your whitelist, if not, skip to the next item
$sql .= "$and $k = ?";
$and = " AND ";
$parameters[] = $v;
$types .= 's';
}
$stmt_query = mysqli_prepare($db, $sql);
mysqli_stmt_bind_params($stmt_query, $types, $parameters);