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

Wie aktualisiere ich ein oder mehrere Felder und ignoriere die leeren Felder in der MySQL-Datenbank?

Denken Sie zunächst daran, alle Zeichenfolgen zu maskieren, die Sie über POST, GET oder REQUEST erhalten (lesen Sie über SQL-Injection-Angriffe nach, wenn Sie sich nicht sicher sind, warum).

So etwas könnte funktionieren:

$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 Hinweis:Schleifen Sie niemals einfach durch Ihr $_POST-Array, um eine SQL-Anweisung zu erstellen. Ein Gegner kann zusätzliche POST-Felder hinzufügen und möglicherweise Unheil anrichten. Das Durchlaufen eines Benutzereingabearrays kann auch zu einem Injektionsvektor führen:Die Feldnamen müssen der Anweisung hinzugefügt werden, was bedeutet, dass sie ein potenzieller Vektor sind. Standardtechniken zur Vermeidung von Injektionen (vorbereitete Anweisungsparameter, vom Treiber bereitgestellte Quoting-Funktionen) funktionieren für Bezeichner nicht. Verwenden Sie stattdessen eine Whitelist von festzulegenden Feldern und durchlaufen Sie die Whitelist oder übergeben Sie das Eingabearray durch die Whitelist.