Mysql
 sql >> база данни >  >> RDS >> Mysql

Генериране на SQL заявка въз основа на URL параметри

Има няколко начина да направите това, но най-лесният начин е да преминете през приемливите колони и след това да добавите подходящо.

// 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съобщение за грешка в MYSQL DBDump

  2. Проблем с производителността на group_concat в MySQL

  3. Как да използвате динамично множество бази данни за един модел в CakePHP

  4. PHP Предупреждение:Стартиране на PHP:Не може да се зареди динамична библиотека 'pdo_mysql.so'

  5. Как да задам избрания елемент в падащо меню