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

URLパラメータに基づいてSQLクエリを生成する

    これを行うにはいくつかの方法がありますが、最も簡単な方法は、受け入れ可能な列をループしてから適切に追加することです。

    // I generally use array and implode to do list concatenations. It avoids
    // the need for a test condition and concatenation. It is debatable as to
    // whether this is a faster design, but it is easier and chances are you 
    // won't really need to optimize that much over a database table (a table
    // with over 10 columns generally needs to be re-thought)
    $search = array();
    // you want to white-list here. It is safer and it is more likely to prevent
    // destructive user error.
    $valid  = array( 'condition', 'brand' /* and so on */ );
    
    
    foreach( $valid as $column )
    {
       // does the key exist?
       if( isset( $_GET[ $column ] ) )
       {
          // add it to the search array.
          $search[] = $column . ' = ' . mysql_real_escape_string( $_GET[ $column ] );
       }
    }
    $sql = 'SELECT * FROM TABLE_NAME WHERE ' . implode( ' AND ', $search );
    // run your search.
    

    'if'ステートメントを本当に削除しようとしている場合は、次を使用できます:

    $columns = array_intersect( $valid, array_keys( $_GET ) );
    foreach( $columns as $column )
    {
        $search[] = $column . ' = ' . mysql_real_escape_string( $_GET[ $column ] );
    }
    $sql = 'SELECT * FROM TABLE_NAME WHERE ' . implode( ' AND ', $search );
    

    ただし、実際のベンチマークを実行して、それが実質的に優れたオプションであるかどうかを判断することもできます。




    1. IDを別のテーブルの値に置き換えるMySQLJOIN

    2. php-mysqlスクリプトが失敗したときに詳細なエラーレポートを取得する方法は?

    3. 月と年のみを保存するmysqlデータ型

    4. ピボットテーブルのようなこのSQLクエリを生成する方法