sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo actualizar uno o más campos ignorando los campos vacíos en la base de datos mysql?

En primer lugar, recuerde escapar de cualquier cadena que le llegue a través de POST, GET o SOLICITUD (lea sobre los ataques de inyección SQL si no está seguro de por qué).

Algo como esto podría funcionar:

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

NOTA :nunca simplemente recorra su matriz $_POST para crear una declaración SQL. Un oponente puede agregar campos POST adicionales y posiblemente causar travesuras. Recorrer una matriz de entrada del usuario también puede conducir a un vector de inyección:los nombres de los campos deben agregarse a la declaración, lo que significa que son un vector potencial. Las técnicas de prevención de inyección estándar (parámetros de declaración preparados, funciones de cotización proporcionadas por el controlador) no funcionarán para los identificadores. En su lugar, use una lista blanca de campos para configurar y recorra la lista blanca o pase la matriz de entrada a través de la lista blanca.