sql >> Databasteknik >  >> RDS >> Mysql

Hur man dynamiskt genererar MYSQL UPDATE-sats baserat på definierade variabler från HTML FORM

Om vi ​​antar att alla fältnamn i tabellen är desamma som namnen på dina formulärinmatningar är detta enkelt. Du kan använda detta:

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

För att vara säkrare bör du skapa en vitlista med accepterade parametrar, dvs kolumnerna i din tabell så här:

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

På så sätt kan din fråga bara innehålla parametrar som du ställer in, och om någon lyckas injicera extrafunktioner (genom att till exempel ändra namnen på dina formulärinmatningar) kommer den inte att skickas till din databas.

Jag skulle också rekommendera att du slutar använda Mysql_* , den är fasad . Du bör titta på MySQLi eller PDO som alternativ.




  1. Laravel-migrering - Överträdelse av integritetsbegränsning:1452 Kan inte lägga till eller uppdatera en underordnad rad:en främmande nyckel-begränsning misslyckas

  2. Hur väljer jag något i MYSQL utan att välja det två gånger om det står i raden

  3. Hur man skapar anpassade genvägar i SQL Server Management Studio (SSMS) - SQL Server / TSQL handledning Del 10

  4. H2 runscript-kommandot förvandlar alla tabellnamn till versaler