簡體   English   中英

mysql更新 - 跳過空白字段?

[英]mysql update - skip blank fields?

我需要知道這樣做的正確方法。 我有一個表單,有人可以填寫3個不同的輸入來更新他們的數據。

他們可以留下一個空白,如果他們想要,只需更新其他兩個或只是一個。 隨你。

所以,如果我更新為:

mysql_query("UPDATE table SET field1=input AND field2=BLANK AND filed3=input WHERE ID=123);

它會留空字段嗎? 只是跳過它們? 或者它會用空字符串/空白字段替換字段?

如果這是錯誤的方法,那么正確的方法是什么? 謝謝!

它將用空值替換它們。 正確的方法是不要將這些項放在查詢中:

if (empty($field1) && empty($field2) && empty($field3) {
  // show error message, nothing to do
  return;
}

$updates = array();
if (!empty($field1))
  $updates[] = 'field1="'.mysql_real_escape_string($field1).'"';
if (!empty($field2))
  $updates[] = 'field2="'.mysql_real_escape_string($field2).'"';
if (!empty($field3))
  $updates[] = 'field3="'.mysql_real_escape_string($field3).'"';
$updates = implode(', ', $updates);

mysql_query("UPDATE table SET $updates WHERE ID=123");

顯然,將更改放在關聯數組或對象中然后遍歷它們會更清晰。

如果用戶使用''作為輸入,則以下UPDATE語句應保持字段不變,否則,它將使用給定的輸入來更新字段。

UPDATE table
SET field1 = CASE
                WHEN input = '' THEN field1
                ELSE input
             END
   , field2 = CASE
                WHEN input2 = '' THEN field2
                ELSE input2
             END
   , field3 = CASE
                WHEN input3 = '' THEN field3
                ELSE input3
             END
WHERE ID = 123

這是通過CASE語句完成的。 WHEN條件檢查輸入它是什么,如果是'' (基本上省略)它將使用field1的當前值來更新field1,基本上保持不變。 如果有值,則會使用該新值。

如果您不想更新某個字段,則必須從UPDATE語句中刪除該字段。

UPDATE table 
SET field1=input AND filed3=input 
WHERE ID=123

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM