我想知道是否可以仅使用非空值更新 SQL 行。
用户想要更新其帐户数据,并将 html 表单中的电子邮件字段留空。生成的 PHP 数组应该更新到数据库,但只有值,这些值不为空:
Array
(
[id] => 9505399
[first_name] => Max
[last_name] => Mustermann
[email] =>
[location] => cologne
[country] => germany
)
SQL 更新:
$sql = "UPDATE observation
SET id = :id,
first_name = :first_name,
last_name = :last_name,
email = :email,
location = :location,
country = :country
WHERE id = :id";
问题:如果用户之前设置过电子邮件,则此 SQL 更新将用空值覆盖现有条目(电子邮件)。我需要防止单元格被空值覆盖。
最佳答案
您可以使用array_filter()
从数组中删除空值。然后您可以像这样动态构建查询:
$arr = array_filter($arr); // remove empty values
$args = [];
$qryargs = [];
foreach ($arr as $key => $val) {
$args[':'.$key] = $val ; // populate query arguments
if ($key == 'id') continue ; // remove id from SET statement
$qryargs[] = $key . ' = :' . $key;
}
// build query string
$sql = "UPDATE observation SET " . implode(', ', $qryargs). " WHERE id = :id";
echo $sql ;
print_r($args);
输出:
UPDATE observation SET first_name = :first_name, last_name = :last_name,
location = :location, country = :country WHERE id = :id
Array
(
[:id] => 9505399
[:first_name] => Max
[:last_name] => Mustermann
[:location] => cologne
[:country] => germany
)
关于php - SQL : Not overwrite tablecell if value is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49169132/