Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eine Abkürzung zum Aktualisieren einer Tabellenzeile in der Datenbank?

Mehr Abfragen bedeuten mehr Zeit. Wenn Sie also jedes Feld einzeln aktualisieren (anstatt jeweils eine Zeile), dauert es erheblich länger.

Außerdem möchten Sie möglicherweise einen Filter auf die übermittelten Werte anwenden, um sicherzustellen, dass kein Feld, das Sie nicht aktualisieren möchten, aktualisiert werden kann.

Wenn Sie beispielsweise eine Tabelle mit Benutzern haben, für die Kontostände aufgeführt sind:

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

Wenn ich ein Formular an Ihren Formular-Handler senden könnte, da das Feld "Kredit" in SHOW COLUMNS... angezeigt würde Abfrage, könnte ich Ihnen eine POST-Übermittlung über ein Formular senden, das für mich verwendet werden soll, um meinen Namen zu ändern, mit $_POST['user'] = "Mike Rowe" und $_POST['credit'] = 9999 , und Sie würden das Obige ändern in:

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

AKTUALISIERUNG: Lösungsvorschlag

Anstatt darauf zu vertrauen, dass die Feldnamen der Datenbank für die Verarbeitung einer solchen Abfrage sicher verwendet werden können, warum haben Sie nicht Ihr eigenes Array von bearbeitbaren Feldern und durchlaufen sie einfach?

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

HINWEIS:Dieser Code ist ungetestet und nicht so, wie ich normalerweise vorgehe, also benutze ihn als Leitfaden, nicht als Bibel...