sql >> データベース >  >> RDS >> Mysql

いくつかのオプションの検索語を含むパラメーター化されたクエリ

    適切にエスケープする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);
    


    1. Eloquentを使用したLaravelとマルチカウントクエリ

    2. Microsoft Accessテーブルのヒント–秘訣とガイドラインパート4

    3. テーブルでクエリを実行すると、group_concatがカットされました

    4. SQL:1つのテーブルに存在しないキーを選択します