Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo truy vấn SQL dựa trên các tham số URL

Có một số cách để thực hiện việc này, nhưng cách dễ nhất là lặp qua các cột được chấp nhận và sau đó nối thêm một cách thích hợp.

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

Nếu bạn thực sự đang cố gắng loại bỏ các câu lệnh 'if', bạn có thể sử dụng điều này:

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

Nhưng bạn có thể muốn chạy các điểm chuẩn thực tế để xác định xem đó có phải là một lựa chọn tốt hơn đáng kể hay không.




  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 boolean - lật giá trị?

  2. Chỉ cần lấy bản ghi từ cơ sở dữ liệu MySQL theo ngày từ trường datetime

  3. Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' trong khi cố gắng cấp đặc quyền. Làm cách nào để cấp đặc quyền?

  4. SQL Server tương đương với hàm substring_index trong MySQL

  5. Làm cách nào để giữ lịch sử cập nhật hồ sơ trong MySQL?