【问题标题】:Mysql UPDATE query, keep the existing value on NULLMysql UPDATE查询,保持现有值为NULL
【发布时间】:2020-01-05 08:20:04
【问题描述】:

到目前为止,我有以下代码:

  $update = $connection->prepare("UPDATE recommendations_tbl
                                     SET IFNULL(?, PLEASE_DO_NOTHING()),
                                         IFNULL(?, PLEASE_DO_NOTHING()),
                                     WHERE recommendation_userid = ?
                                     ");


  $update->bindValue(1, $recommendationsDataInput["recommendationCategoryNameInput"]);
  $update->bindValue(2, $recommendationsDataInput["recommendationManufacturerNameInput"]);
  $update->bindValue(3, $recommendationUserID);


  $updateResult = $insertion->execute();

现在,我对准备好的语句很陌生,我刚刚了解了在准备好的语句中使用 IFNULL : Logic to NOT insert a value to column X in a prepared statement

我不确定除了我的小占位符 PLEASE_DO_NOTHING() 之外的语法是否真的可以工作。 但是,我现在的主要问题是我不知道我是否可以以这种方式实际使用 IFNULL() : 如果定义了输入值,则设置新值。 如果输入值未定义 (=NULL),则不执行任何操作。

这可能吗?如果可以,我该怎么做?

【问题讨论】:

  • 你需要在你的应用层构建不同的语句。如果您不想更改某些字段的值,请不要将其包含在 SQL 中。
  • @Dharman 是的,我可以做到这一点,而且我也知道如何做到这一点,但在这种情况下,我想学习如何按照我上面描述的方式做到这一点。
  • @baryon123 值得学习吗?想想在我 5/6 年的 PHP 中,我从未见过这个或想过这个 xD 的逻辑用途
  • 老实说,这个问题和prepared statements没有太大关系(而是和一般的SQL有关),但除此之外很好
  • @treyBake 也许很好 ^^ 但你永远不知道什么时候可以使用它,在我的情况下,我喜欢让我的用户将输入字段留空,然后相应地处理数据而不进行处理它在 php 方面具有更广泛的逻辑。也许我再也不需要它了,但我目前只是在测试,正如我所说,谁知道它将来可能有什么用途:D

标签: php mysql pdo prepared-statement


【解决方案1】:

实际上,您可以使用 PHP 或使用 IFNULL 来做到这一点。

使用 PHP,您可以根据您的 NULL 对象使用不同的准备好的语句来完成。

使用 IFNULL,您可以尝试设置与当前列相同的值,例如,您的列被称为 Recommendation_category_name 和 Recommendation_manufacturer_name:

$connection->prepare("UPDATE recommendations_tbl SET
          recommendation_category_name = IFNULL(?, recommendation_category_name),
          recommendation_manufacturer_name = IFNULL(?, recommendation_manufacturer_name),
          WHERE recommendation_userid = ?
");

【讨论】:

  • 我能够实现类似的目标。我正在创建一个 API,并且我只想在值不为空时更新字段。更新用户 SET first_name = 'Billy', last_name = 'Bob', password = IFNULL(NULL, password)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多