php - SQL : Not overwrite tablecell if value is empty

标签 php mysql sql-update

我想知道是否可以仅使用空值更新 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/

相关文章:

php - 在 MySQL 数据库中编辑值

php - 根据日期从另一个表更新mysql一个表

oracle - 使用从同一个表获取值的变量创建更新触发器的正确​​方法是什么?

javascript - onkeyup 对每一行的出现和计算

php - 模型中的 “reporting”错误

php - 多个表连接并仅使用一个 Blade 获得结果

php - Codeigniter 从结果行中获取 2 列()

php - Squid 代理身份验证失败

php - Doctrine 实体删除 vs 删除查询,性能比较

php - 连接多个数据库并在php中跨数据库加入查询