sql >> Database teknologi >  >> RDS >> Mysql

hvordan opdaterer man et eller flere felter og ignorerer de tomme felter i mysql-databasen?

Husk først at undslippe eventuelle strenge, der kommer til dig via POST, GET eller REQUEST (læs om SQL-injektionsangreb, hvis du er usikker på hvorfor).

Noget som dette kan virke:

$semaphore = false;
$query = "UPDATE contacts SET ";
$fields = array('tel','fax','email');
foreach ($fields as $field) {
   if (isset($_POST[$field]) and !empty($_POST[$field]) {
     $var = mysql_real_escape_string($_POST[$field]);
     $query .= uppercase($field) . " = '$var'";
     $semaphore = true;
   }
}

if ($semaphore) {
   $query .= " WHERE Cust_Name = '$cst'";
   mysql_query($query);
}

NB :Du må aldrig blot gå gennem dit $_POST-array for at oprette en SQL-sætning. En modstander kan tilføje ekstra POST-felter og muligvis forårsage fortræd. Looping gennem et brugerinput-array kan også føre til en injektionsvektor:feltnavnene skal tilføjes til sætningen, hvilket betyder, at de er en potentiel vektor. Standard teknikker til forebyggelse af injektion (forberedte sætningsparametre, driverleverede citeringsfunktioner) virker ikke for identifikatorer. Brug i stedet en hvidliste over felter til at indstille, og løkke over hvidlisten eller giv input-arrayet gennem hvidlisten.



  1. Kolonne Afhænger af anden kolonne

  2. Sådan formateres tal i PostgreSQL

  3. PDO::FETCH_CLASS med flere klasser

  4. At sortere en VARCHAR-kolonne som FLOAT ved hjælp af CAST-operatoren virker ikke i MySQL