mysql更新 - 跳过空白字段?

时间:2011-12-08 00:42:53

标签: php mysql

我需要知道这样做的正确方法。 我有一个表格,有人可以填写3个不同的输入来更新他们的数据。

如果他们愿意,他们可以留下一个空白,只更新另外两个或只更新一个。不管。

所以,如果我更新为:

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

它会保留空白字段吗?只是跳过它们?或者它会用空字符串/空白字段替换字段?

如果这是错误的方法,那么正确的方法是什么? 谢谢!

3 个答案:

答案 0 :(得分:10)

它将用空白值替换它们。正确的方法是不将这些项放在查询中 所有:

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");

显然,将更改放在关联数组或对象中,然后遍历它们会更清晰。

答案 1 :(得分:5)

如果用户使用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,基本上保持不变。如果有值,则会使用该新值。

答案 2 :(得分:0)

如果您不想更新某个字段,则必须从UPDATE语句中删除该字段。

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