mysqli 准备好的语句 - 不更新 NULL 值

Kar*_*ler 3 php mysql mysqli prepared-statement

我有一个准备好的语句来更新几个字段。我从公式中获取数据,但并非所有字段都是必需的。所以可能有些字段没有设置。我将它们默认设置为 NULL。现在我不想用 NULL 覆盖旧值。如果值为 NULL,如何告诉 MySql 不更新该值?

$insert_stmt = $mysqli->prepare("
UPDATE members SET username=?, email=?,  $password=?, $random_salt=?, level=?, customerID=?, name=?, surname=?, phone=?, quantities=? WHERE id=?
");
$insert_stmt->bind_param('ssssissss', $username, $email, $password, $random_salt, $level, $customerID, $firstname, $surname, $phone);
$insert_stmt->execute();
Run Code Online (Sandbox Code Playgroud)

在我的情况下,密码和 random_salt 值可能为 NULL。仅通过 NULL 覆盖密码将非常糟糕;)

Ran*_*eed 5

您可以按如下方式更改查询:

UPDATE members SET
    username = IFNULL(?, username),
    email = IFNULL(?, email) -- and so on for all fields
WHERE...
Run Code Online (Sandbox Code Playgroud)

首先检查参数的值并动态构建查询也可能更有效,仅包括您有非空值要更新的字段。