Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skrót do aktualizacji wiersza tabeli w bazie danych?

Więcej zapytań oznacza więcej czasu, więc jeśli aktualizujesz każde pole indywidualnie (a nie wiersz na raz), zajmie to znacznie więcej czasu.

Możesz również zastosować filtr do przesłanych wartości, aby upewnić się, że żadne pole, którego nie chcesz aktualizować, nie będzie mogło zostać zmienione.

Na przykład, jeśli masz tabelę użytkowników, dla których wymienione są salda kont:

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

Gdybym mógł przesłać formularz do twojego programu obsługi formularzy, ponieważ pole "kredyt" pojawiłoby się w SHOW COLUMNS... zapytanie, mogę wysłać Ci zgłoszenie POST za pomocą formularza przeznaczonego dla mnie do zmiany mojego imienia i nazwiska, z $_POST['user'] = "Mike Rowe" i $_POST['credit'] = 9999 , a ty zmienisz powyższe na:

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

AKTUALIZACJA: Sugerowane rozwiązanie

Zamiast ufać, że nazwy pól bazy danych są bezpieczne w obsłudze takiego zapytania, dlaczego nie mieć własnej tablicy edytowalnych pól i po prostu przechodzić przez nie w pętli?

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

UWAGA:Ten kod nie został przetestowany i nie jest taki, jak zwykle działam, więc używaj go jako przewodnika, a nie Biblii...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel Eloquent uzyskuje wyniki pogrupowane według dni

  2. log4j2 Menedżer JDBC nie może połączyć się z bazą danych

  3. Czy są jakieś walidatory SQL, które mogą sprawdzać składnię na wielu serwerach baz danych?

  4. Dołącz do dwóch stołów mysql

  5. Tabela MySQL jest oznaczona jako uszkodzona i ostatnia (automatyczna?) naprawa nie powiodła się