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

Cách tạo động câu lệnh MYSQL UPDATE dựa trên các biến được xác định từ HTML FORM

Giả sử rằng tất cả các tên trường trong bảng giống với tên của các đầu vào biểu mẫu của bạn, điều này sẽ được chuyển thẳng. Bạn có thể sử dụng cái này:

$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
    if( ! empty($val)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

Để an toàn hơn, bạn nên tạo một danh sách trắng gồm các tham số được chấp nhận, tức là các cột trong bảng của bạn như sau:

$query = "UPDATE product SET";
$comma = " ";
$whitelist = array(
    'title',
    'rating',
    'season',
    'brand_id',
    'cateogry',
    // ...etc
);
foreach($_POST as $key => $val) {
    if( ! empty($val) && in_array($key, $whitelist)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

Bằng cách đó, truy vấn của bạn chỉ có thể chứa các tham số bạn đã đặt và nếu ai đó quản lý để thêm các phần bổ sung (ví dụ:bằng cách thay đổi tên của các đầu vào biểu mẫu của bạn) thì nó sẽ không được chuyển đến cơ sở dữ liệu của bạn.

Tôi cũng khuyên bạn nên ngừng sử dụng Mysql_ * , không được dùng nữa . Bạn nên xem MySQLi hoặc PDO như các lựa chọn thay thế.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqladmin:kết nối với máy chủ tại 'localhost' không thành công

  2. truy cập mysql trong máy chủ từ hộp ảo khách

  3. Loại dữ liệu cho URL

  4. Lưu trữ các thay đổi trên các thực thể:MySQL có phải là giải pháp thích hợp?

  5. Chuyển đổi giữa nhiều cơ sở dữ liệu trong Rails mà không làm gián đoạn các giao dịch