Lebih banyak kueri berarti lebih banyak waktu, jadi jika Anda memperbarui setiap bidang satu per satu (bukan satu baris dalam satu waktu), itu akan memakan waktu lebih lama secara signifikan.
Selain itu, Anda mungkin ingin menerapkan filter ke nilai yang dikirimkan untuk memastikan bahwa tidak ada bidang yang tidak ingin Anda perbarui.
Misalnya, jika Anda memiliki tabel pengguna yang memiliki saldo akun yang terdaftar terhadap mereka:
id | user | credit
==========================
1 | John Smith | 50
Jika saya dapat mengirimkan formulir ke pengendali formulir Anda, karena bidang "kredit" akan muncul di SHOW COLUMNS...
permintaan, saya dapat mengirimkan kiriman POST kepada Anda, melalui formulir yang dimaksudkan untuk digunakan bagi saya untuk mengubah nama saya, dengan $_POST['user'] = "Mike Rowe"
dan $_POST['credit'] = 9999
, dan Anda akan mengubah di atas menjadi:
id | user | credit
==========================
1 | Mike Rowe | 9999
PERBARUI: Solusi yang disarankan
Daripada percaya bahwa nama bidang database aman digunakan untuk menangani kueri seperti ini, mengapa tidak memiliki larik bidang Anda sendiri yang dapat diedit dan hanya mengulangnya?
$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']
));
CATATAN:Kode ini belum diuji dan bukan cara saya biasanya beroperasi, jadi gunakan sebagai panduan, bukan alkitab...