Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como atualizar um ou mais campos ignorando os campos vazios no banco de dados mysql?


Em primeiro lugar, lembre-se de escapar de qualquer string que chegue até você via POST, GET ou REQUEST (leia sobre ataques de injeção de SQL se não tiver certeza do motivo).

Algo assim pode 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);
}

NB :Nunca simplesmente percorra seu array $_POST para criar uma instrução SQL. Um oponente pode adicionar campos POST extras e possivelmente causar danos. Fazer um loop em uma matriz de entrada do usuário também pode levar a um vetor de injeção:os nomes dos campos precisam ser adicionados à instrução, o que significa que eles são um vetor em potencial. As técnicas de prevenção de injeção padrão (parâmetros de instrução preparados, funções de cotação fornecidas pelo driver) não funcionarão para identificadores. Em vez disso, use uma lista branca de campos para definir e faça um loop sobre a lista branca ou passe a matriz de entrada pela lista branca.