MySQL обновлять поля, только если они пустые или NULL - PullRequest
0 голосов
/ 08 июля 2020

У меня действительно длинный запрос 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 = ''

Но как я могу применить это ко всем полям сразу?

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Я бы просто разделил обновление на три отдельных запроса.

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

UPDATE table SET field_2 = '$field_2' WHERE field_2 IS NULL OR field_2 = '';

UPDATE table SET field_3 = '$field_3' WHERE field_3 IS NULL OR field_3 = '';
1 голос
/ 08 июля 2020

Да, я считаю, что это возможно. Для этого можно использовать функцию 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...