Więcej zapytań oznacza więcej czasu, więc jeśli aktualizujesz każde pole indywidualnie (a nie wiersz na raz), zajmie to znacznie więcej czasu.
Możesz również zastosować filtr do przesłanych wartości, aby upewnić się, że żadne pole, którego nie chcesz aktualizować, nie będzie mogło zostać zmienione.
Na przykład, jeśli masz tabelę użytkowników, dla których wymienione są salda kont:
id | user | credit
==========================
1 | John Smith | 50
Gdybym mógł przesłać formularz do twojego programu obsługi formularzy, ponieważ pole "kredyt" pojawiłoby się w SHOW COLUMNS...
zapytanie, mogę wysłać Ci zgłoszenie POST za pomocą formularza przeznaczonego dla mnie do zmiany mojego imienia i nazwiska, z $_POST['user'] = "Mike Rowe"
i $_POST['credit'] = 9999
, a ty zmienisz powyższe na:
id | user | credit
==========================
1 | Mike Rowe | 9999
AKTUALIZACJA: Sugerowane rozwiązanie
Zamiast ufać, że nazwy pól bazy danych są bezpieczne w obsłudze takiego zapytania, dlaczego nie mieć własnej tablicy edytowalnych pól i po prostu przechodzić przez nie w pętli?
$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']
));
UWAGA:Ten kod nie został przetestowany i nie jest taki, jak zwykle działam, więc używaj go jako przewodnika, a nie Biblii...