Mysql
 sql >> база данни >  >> RDS >> Mysql

как да актуализирате едно или повече полета, като игнорирате празните полета в базата данни на mysql?

Първо, не забравяйте да избягвате всички низове, идващи при вас чрез POST, GET или REQUEST (прочетете за атаките с инжектиране на SQL, ако не сте сигурни защо).

Нещо подобно може да работи:

$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 :Никога не минавайте през вашия масив $_POST, за да създадете SQL израз. Противникът може да добави допълнителни POST полета и евентуално да причини пакости. Преминаването през масив за въвеждане на потребител може също да доведе до вектор на инжектиране:имената на полетата трябва да бъдат добавени към израза, което означава, че те са потенциален вектор. Стандартните техники за предотвратяване на инжектиране (подготвени параметри на израза, функции за цитиране, предоставени от драйвера) няма да работят за идентификатори. Вместо това използвайте бял списък с полета, за да зададете, и прекарайте белия списък или прекарайте входния масив през белия списък.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Полето JPA @Version не се увеличава

  2. Изискване за Blob и съхранение

  3. MySQL Сортиране на заявки с числа

  4. Преглед на по-ранен регистър на заявките - MySQL

  5. грешка при пълно присъединяване на mysql-#1054 - Неизвестна колона 'feesmaster.PAIDAMOUNT' в 'списък с полета'