sql >> Databáze >  >> RDS >> Mysql

Zkratka pro aktualizaci řádku tabulky v databázi?

Více dotazů znamená více času, takže pokud aktualizujete každé pole jednotlivě (spíše než řádek po druhém), bude to trvat podstatně déle.

Také můžete chtít použít filtr na odeslané hodnoty, abyste zajistili, že nebude možné aktualizovat žádné pole, které nechcete aktualizovat.

Pokud jste například měli tabulku uživatelů, kteří měli proti nim uvedeny zůstatky na účtech:

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

Pokud bych mohl odeslat formulář vašemu obslužnému programu formuláře, protože pole "kredit" by se zobrazilo v SHOW COLUMNS... dotaz, mohl bych vám poslat příspěvek POST prostřednictvím formuláře, který má být použit ke změně mého jména, s $_POST['user'] = "Mike Rowe" a $_POST['credit'] = 9999 a výše uvedené byste změnili na:

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

AKTUALIZACE: Navrhované řešení

Spíše než věřit, že názvy databázových polí lze bezpečně použít pro zpracování dotazu, jako je tento, proč nemít vlastní pole upravitelných polí a jednoduše je procházet?

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

POZNÁMKA:Tento kód není testován a není to způsob, jakým obvykle funguji, takže jej používejte jako vodítko, ne jako bible...




  1. Cheat Sheet s příkazy SQL – Jak se naučit SQL za 10 minut

  2. Schéma databáze, autoinkrementace

  3. Implementace nastavení více datových center pro PostgreSQL – část první

  4. Jak uložit pole nebo více hodnot do jednoho sloupce