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. và $ _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 ...