Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Generowanie zapytania SQL na podstawie parametrów URL

Można to zrobić na kilka sposobów, ale najprostszym sposobem byłoby przejście przez dopuszczalne kolumny, a następnie odpowiednie dołączenie.

// 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.

Jeśli naprawdę próbujesz pozbyć się stwierdzeń „jeśli”, możesz użyć tego:

$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 );

Ale możesz chcieć przeprowadzić rzeczywiste testy porównawcze, aby ustalić, czy jest to znacznie lepsza opcja.




  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 Zwraca top 5 z każdej kategorii

  2. Jak poprawić „java.sql.SQLFeatureNotSupportedException” podczas korzystania z metody createArrayOf()

  3. Listy w klauzuli MyBatis „IN”

  4. wstawiaj wiele pól za pomocą pętli foreach

  5. Pobieranie wartości Timestamp z bazy danych mysql przy użyciu szablonu Spring JDBC