首页 > 解决方案 > MySQL 仅在字段为空或 NULL 时更新字段

问题描述

我有一个非常冗长的 UPDATE 查询

$sql = "UPDATE table SET
field_1 = '$field_1',
field_2 = '$field_2',
field_3 = '$field_3'

...

WHERE id = '$id'
";

我希望仅在目标字段为空或 NULL 时才进行更新。我想我可以使用这样的东西:

UPDATE table SET field_1 = '$field_1' WHERE field_1 IS NULL OR field_1 = ''

但是我怎样才能一次将它应用到所有领域呢?

标签: phpmysql

解决方案


是的,我相信这是可能的。您可以使用 IF() 函数来实现这一点。

UPDATE `table` SET field_1 = IF(field_1 IS NULL or field_1 = "", ?, field_1), field_2 = IF(field_2 IS NULL or field_2 = "", ?, field_2)

请注意 ? 在查询中,因为这些是准备好的语句的占位符

在使用用户输入时,您应该认真考虑这一点。一个例子可能看起来像

$conn = new PDO; // configure this class accordingly.

$query = $conn->prepare("select * from table where field = ? and field_2 = ?");
try {
$query->execute(array($value1, $value2));
} catch (PDOException $e) {
   $e->getErrors(); // Do what you want to do with this log, print etc.
}

$results = $query->fetchAll(PDO::FETCH_ASSOC); // This will return an array of results.
$result = $query->fetch(PDO::FETCH_ASSOC); // This will return the first result.

以上只是一个示例,说明如何实现防止 sql 注入的查询,请在此处阅读以获取更多信息,并考虑采用它

https://www.php.net/manual/en/pdo.prepare.php

https://www.php.net/manual/en/mysqli.prepare


推荐阅读