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

Một đường tắt để cập nhật một hàng bảng trong cơ sở dữ liệu?

Nhiều truy vấn hơn có nghĩa là nhiều thời gian hơn, vì vậy nếu bạn đang cập nhật từng trường riêng lẻ (thay vì một hàng cùng một lúc), thì sẽ mất nhiều thời gian hơn.

Ngoài ra, bạn có thể muốn áp dụng bộ lọc cho các giá trị đã gửi để đảm bảo rằng không có trường nào bạn không muốn cập nhật có thể được cập nhật.

Ví dụ:nếu bạn có một bảng người dùng có số dư tài khoản được liệt kê chống lại họ:

id | user       | credit
==========================
1  | John Smith | 50

Nếu tôi có thể gửi biểu mẫu đến trình xử lý biểu mẫu của bạn, vì trường "tín dụng" sẽ hiển thị trong SHOW COLUMNS ... truy vấn. $ _POST ['credit'] =9999 và bạn sẽ thay đổi ở trên thành:

id | user       | credit
==========================
1  | Mike Rowe  | 9999

CẬP NHẬT: Giải pháp được đề xuất

Thay vì tin tưởng rằng tên trường cơ sở dữ liệu an toàn để sử dụng cho việc xử lý một truy vấn như thế này, tại sao bạn không có mảng trường có thể chỉnh sửa của riêng bạn và chỉ lặp qua chúng?

$editable_fields = array(
  'pg_url' ,
  'pg_title' ,
  ...
);

$form_values = array();
$sql_pattern = array();
foreach( $editable_fields as $k ){
  if( $k != 'pg_id'
      && isset( $_POST[$k] ) ){
    $form_values[$k] = $_POST[$k];
    // NOTE: You could use a variant on your above code here, like so
    // $form_values[$k] = set_variable( $_POST , $k );
    $sql_pattern[] = "$k = ?";
  }
}

$sql_pattern = 'UPDATE root_pages SET '.implode( ' , ' , $sql_pattern ).' WHERE pg_id = ?';

# use the instantiated db connection object from the init.php, to process the query
$result = $connection->run_query($sql_pattern,array_merge(
    $form_values ,
    $_POST['pg_id']
    ));

LƯU Ý:Mã này chưa được kiểm tra và không phải là cách tôi thường vận hành, vì vậy hãy sử dụng nó làm hướng dẫn, không phải kinh thánh ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách thoát đầu vào nhưng lưu không thoát vào cơ sở dữ liệu

  2. Muốn đặt giới hạn MySql trên từng điều kiện where

  3. MySQL - Mối quan hệ Một - Một?

  4. Các truy vấn MySQL lặp lại từ Python trả về cùng một dữ liệu

  5. Trả về đầu ra của Python CGI MySQL Script