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

Jak dynamicznie wygenerować instrukcję MYSQL UPDATE na podstawie zdefiniowanych zmiennych z formularza HTML?

Zakładając, że wszystkie nazwy pól w tabeli są takie same jak nazwy danych wejściowych formularza, jest to proste. Możesz użyć tego:

$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
    if( ! empty($val)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

Aby zapewnić sobie większe bezpieczeństwo, należy utworzyć białą listę akceptowanych parametrów, tj. kolumny w tabeli w następujący sposób:

$query = "UPDATE product SET";
$comma = " ";
$whitelist = array(
    'title',
    'rating',
    'season',
    'brand_id',
    'cateogry',
    // ...etc
);
foreach($_POST as $key => $val) {
    if( ! empty($val) && in_array($key, $whitelist)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

W ten sposób Twoje zapytanie może zawierać tylko ustawione przez Ciebie parametry, a jeśli komuś uda się wprowadzić dodatki (na przykład zmieniając nazwy danych wejściowych formularza), nie zostaną one przesłane do Twojej bazy danych.

Zalecam również zaprzestanie używania Mysql_* , jest przestarzałe . Powinieneś spojrzeć na MySQLi lub PDO jako alternatywy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wszystkie zduplikowane rekordy w tabeli MySQL bez tabel tymczasowych?

  2. MySQL echo liczba rekordów o tym samym identyfikatorze sesji

  3. Jak sprawić, by wiele LEFT JOIN z OR w pełni wykorzystywało indeks złożony? (część 2)

  4. Jak mogę przekonwertować datę i godzinę na datę, obcinając godziny, pozostawiając mi daty?

  5. Połącz się z serwerem mysql bez sudo