php - 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 = ''
但是我怎样才能一次将它应用到所有领域呢?
解决方案
是的,我相信这是可能的。您可以使用 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 注入的查询,请在此处阅读以获取更多信息,并考虑采用它
推荐阅读
- reactjs - 如何处理 redux 在刷新/重新加载时清除状态
- payfast - 错误:400 错误请求很遗憾,我们无法处理您的交易。出现问题:未收到付款数据
- javascript - React/redux-saga:如何定期从服务器更新其他用户所做的数据,同时对其进行更改?
- node.js - 向 node.js 发出动态命令行请求
- intellij-idea - IntelliJ IDEA:移动到“在路径中查找”中出现的对话框编辑器的快捷方式
- python - 为什么 Python 认为这是一个元组?
- java - 在 JFrame 中平滑移动 JLabel
- javascript - 在 switch case 中使用 !(not) 运算符
- tinkerpop - 在 Gremlinpython 中验证迭代边缘插入
- elasticsearch - Elasticsearch 中的公斤到克转换处理器