Mysql
 sql >> Database >  >> RDS >> Mysql

Una scorciatoia per aggiornare una riga di tabella nel database?

Più query significano più tempo, quindi se aggiorni ogni campo singolarmente (anziché una riga alla volta), ci vorrà molto più tempo.

Inoltre, potresti voler applicare un filtro ai valori inviati per assicurarti che nessun campo che non desideri venga aggiornato possa essere.

Ad esempio, se avevi una tabella di utenti a cui erano elencati i saldi dei conti:

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

Se potessi inviare un modulo al tuo gestore del modulo, poiché il campo "credito" verrebbe visualizzato in SHOW COLUMNS... richiesta, potrei inviarti un invio POST, tramite un modulo destinato a essere utilizzato per cambiare il mio nome, con $_POST['user'] = "Mike Rowe" e $_POST['credit'] = 9999 e cambieresti quanto sopra in:

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

AGGIORNAMENTO: Soluzione suggerita

Piuttosto che fidarti che i nomi dei campi del database siano sicuri da usare per gestire una query come questa, perché non avere il tuo array di campi modificabili e scorrerli semplicemente?

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

NOTA:questo codice non è stato testato e non è il modo in cui io di solito agisco, quindi usalo come guida, non come Bibbia...