mysql更新 - 跳过空白字段?

Dan*_*ter 2 php mysql

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

他们可以留下一个空白,如果他们想要,只需更新其他两个或只是一个.随你.

所以,如果我更新为:

mysql_query("UPDATE table SET field1=input AND field2=BLANK AND filed3=input WHERE ID=123);
Run Code Online (Sandbox Code Playgroud)

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

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

Abh*_*ert 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");
Run Code Online (Sandbox Code Playgroud)

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


Ada*_*ger 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
Run Code Online (Sandbox Code Playgroud)

这是通过CASE语句完成的.该WHEN条件检查,看看有什么输入它,如果它''(基本上省略),它会使用field1的当前值更新与FIELD1,基本上离开它不变.如果有值,则会使用该新值.