Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL仅在字段为空或NULL时更新字段_Php_Mysql - Fatal编程技术网

Php MySQL仅在字段为空或NULL时更新字段

Php MySQL仅在字段为空或NULL时更新字段,php,mysql,Php,Mysql,我有一个很长的更新查询 $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 = '

我有一个很长的更新查询

$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为NULL或field_1=“”,?,field_1),field_2=IF(field_2为NULL或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注入的查询的例子,请在这里阅读更多信息,并考虑采用< <强>


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

UPDATE`table`SET field_1=IF(field_1为NULL或field_1=“”,?,field_1),field_2=IF(field_2为NULL或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注入的查询的例子,请在这里阅读更多信息,并考虑采用< <强>


我会将更新分为三个独立的查询

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 = '';

我只是将更新分为三个单独的查询

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 = '';

我知道这很愚蠢,但我决定走这条路,因为我现在无法理解准备好的陈述。我知道这很愚蠢,但我决定走这条路,因为我现在无法理解准备好的陈述。