Mysql
 sql >> Base de données >  >> RDS >> Mysql

Un raccourci pour mettre à jour une ligne de table dans la base de données ?

Plus de requêtes signifie plus de temps, donc si vous mettez à jour chaque champ individuellement (plutôt qu'une ligne à la fois), cela prendra beaucoup plus de temps.

En outre, vous pouvez appliquer un filtre aux valeurs soumises pour vous assurer qu'aucun champ que vous ne souhaitez pas mettre à jour ne puisse l'être.

Par exemple, si vous aviez un tableau d'utilisateurs pour lesquels des soldes de compte étaient répertoriés :

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

Si je pouvais soumettre un formulaire à votre gestionnaire de formulaire, car le champ "crédit" apparaîtrait dans le SHOW COLUMNS... question, je pourrais vous envoyer une soumission POST, via un formulaire destiné à être utilisé pour que je change mon nom, avec $_POST['user'] = "Mike Rowe" et $_POST['credit'] = 9999 , et vous remplaceriez ce qui précède par :

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

MISE À JOUR : Solution suggérée

Plutôt que de croire que les noms de champs de la base de données peuvent être utilisés en toute sécurité pour traiter une requête comme celle-ci, pourquoi ne pas avoir votre propre tableau de champs modifiables et simplement les parcourir ?

$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']
    ));

REMARQUE :Ce code n'a pas été testé et n'est pas celui que j'utilise habituellement, alors utilisez-le comme un guide, pas comme une bible...