Flere forespørgsler betyder mere tid, så hvis du opdaterer hvert felt individuelt (i stedet for en række ad gangen), vil det tage betydeligt længere tid.
Du kan også anvende et filter på de indsendte værdier for at sikre, at intet felt, som du ikke ønsker opdateret, kan blive det.
For eksempel, hvis du havde en tabel med brugere, der havde kontosaldi opført mod dem:
id | user | credit
==========================
1 | John Smith | 50
Hvis jeg kunne indsende en formular til din formularbehandler, da "kredit"-feltet ville dukke op i SHOW COLUMNS...
forespørgsel, kunne jeg sende dig en POST-indsendelse via en formular, der er beregnet til at blive brugt til, at jeg kan ændre mit navn, med $_POST['user'] = "Mike Rowe"
og $_POST['credit'] = 9999
, og du vil ændre ovenstående til:
id | user | credit
==========================
1 | Mike Rowe | 9999
OPDATERING: Foreslået løsning
I stedet for at stole på, at databasefeltnavnene er sikre at bruge til at håndtere en forespørgsel som denne, hvorfor så ikke have din egen række af redigerbare felter og bare gå igennem dem?
$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']
));
BEMÆRK:Denne kode er utestet og ikke den måde, jeg plejer at bruge, så brug den som en guide, ikke en bibel...