通过准备好的语句更新sql中的行[关闭]

问题描述 投票:-3回答:1

我有一个产品表,其中包含ID,名称,描述,颜色,价格,数量和状态

如何通过使用准备好的语句连续更新名称,描述或仅更新2-3个字段。例如,我准备好的语句是

UPDATE product SET product_name = ?, product_desc = ?,product_size = ?, product_color = ?,product_price = ?,product_quantity = ?, product_status = ? WHERE id = $id

[bind_param看起来像这样

bind_param("ssssiii", $data['name'], $data['desc'], $data['size'], $data['color'], $data['price'], $data['quantity'], $data['status'])

并且假设$data['color']$data['quantity']为空,那么我如何更新数据库中的该行以保留product_colorproduct_quantity列的旧值。

执行更新语句时它是否自动保留旧数据,或者我必须对类似内容进行一些验证?

这是我的代码:

        $connect = new mysqli(HOST,USER,PASSWORD,DATABASE);;
        $sql = "UPDATE product SET product_name = ?, product_desc = ?,product_size = ?,
                product_color = ?,product_price = ?,product_quantity = ?, product_status = ? 
                WHERE id = $id";

        $stmt = $connect->prepare($sql);

        $stmt->bind_param("ssssiii", $data['name'], $data['desc'], $data['size'], $data['color'],
                        $data['price'],$data['quantity'],$data['status']);
        $stmt->execute();
        $stmt->close();
php sql prepared-statement
1个回答
2
投票

如果我理解正确,则可以使用coalesce()

UPDATE $tableName
    SET product_name = COALESCE(?, product_name),
        product_desc = COALESCE(?, product_desc),
        product_size = COALESCE(?, product_size),
        product_color = COALESCE(?, product_color),
        product_quantity = COALESCE(?, product_quantity),
        product_status = COALESCE(?, product_status)
    WHERE id = ?;

注意:

  • 这假设您不想设置值时,传入的参数为NULL
  • 您不能将列设置为NULL
  • 我更改了WHERE,因此它引用了一个参数。
© www.soinside.com 2019 - 2024. All rights reserved.