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

フォームオプションを使用してMYSQLクエリをフィルタリングする

    これを試してみてください。ローカルでのテスト(dbなし)からは正しく見えました。

    $n_req = 0;
    $_POST['usuario'] = 'test';
    $_POST['resumo'] = 'test2';
    $_POST['status'] = 'test3';
    if (!empty($_POST['usuario'])) {
    $req_usuario = $_POST['usuario'];
    $where[] = " usuario = ? ";
    $params[] = $req_usuario;
    $n_req++;
    }
    if (!empty($_POST['resumo'])) {
    $req_resumo = $_POST['resumo'];
    $where[] = " resumo = ? ";
    $params[] = $req_resumo;
    $n_req++;
    }
    if (!empty($_POST['status'])) {
        $req_status = $_POST['status'];
    $where[] = " status = ? ";
    $params[] = $req_status;
    $n_req++;
    }
    $sql_where = !empty($where) ? ' where ' . implode(' and ', $where) : '';
    echo $sql_where;
    $tot = mysqli_prepare($con, "SELECT * FROM solicitacoes $sql_where");
    if(!empty($params)) {
    //foreach($params as $param) {
    //  mysqli_stmt_bind_param($tot, "s", $param);
        //echo $param;
    //}
    $params = array_merge(array($tot),
                      array(str_repeat('s', count($params))), 
                      array_values($params));
    print_r($params);
    call_user_func_array('mysqli_stmt_bind_param', $params);
    // adapated from https://stackoverflow.com/questions/793471/use-one-bind-param-with-variable-number-of-input-vars and http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli may need to be altered
    }
    echo "SELECT * FROM solicitacoes $sql_where";
    mysqli_execute($tot);
    

    3つの値すべてが入力されている場合、クエリは

    になります。

    プロセスの後半で、ドライバーによって値が入力されます。これにより、ユーザーが悪意のあるコードを追加してSQL処理を操作するのを防ぐことができます。

    https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
    SQLを防ぐにはどうすればよいですかPHPでのインジェクション?

    $ funcaoの場所もわかりませんでした 設定されました。

    mysqliをコメントアウトできます 関数を実行し、エコーラインを削除して、コードの機能を確認します。このようにして、クエリが期待どおりに作成されていることを確認しました。



    1. SQLとアプリケーションで計算を実行することの長所と短所は何ですか

    2. djangoのデータベースエンジンとしてのpostgresとpostgresql_psycopg2の違いは何ですか?

    3. ContentProviderを使用してデータベース操作を処理することは良い習慣ですか?

    4. Oracleの条件付きSUM