【问题标题】:Update Row Fields if POST['submitted_field'] Is Not Null MariaDB , MySQL如果 POST['submitted_field'] 不为空,则更新行字段 MariaDB,MySQL
【发布时间】:2021-01-31 07:01:43
【问题描述】:

您好,我正在尝试更新有效提交的用户信息 在我的查询中,只有当相关的 $_POST[ ] 不为空时,才可以更新多个列 我怎么能这样做?使用工具 php , MariaDB 或 mysql I. 我尝试过类似的方法,但它返回与 MariaDB 对应的语法错误

 $query = " UPDATE `users`
            SET name = COALESCE($name, name),
            title = COALESCE($title, title),
            email = COALESCE($email, email),
            gender = COALESCE($gender, gender)
            WHERE `id` = '" . $_SESSION['id'] . "'   LIMIT 1";

【问题讨论】:

  • 我认为这是错误的做法。检查php中的输入值,根据结果生成MYSQL查询。

标签: php mysql mariadb web-development-server


【解决方案1】:

你可以有一个帮手来做这件事

function getUserUpdateQuery(array $data, $userId)
{
    $condition = 'WHERE id = '.$userId;
    $query = 'UPDATE `users` SET ';
    $updates = [];

    foreach ($data as $columnName => $columnValue) {
        if( !is_null($columnValue) )
        {
            $updates[] = sprintf('`%s` = \'%s\'', $columnName, $columnValue);
        }
    }

    $query .= implode(' AND ', $updates).' ';

    $query .= $condition;

    return $query;
}

$query = getUserUpdateQuery(['title' => $title, 'email' => $email], $_SESSION['id']);

// updating codes here

注意:在生产环境中,最好是绑定数据。 PDO 是一个很好的工具。

【讨论】:

  • 这很聪明,但是 if( !is_null($columnValue) ) 不是我想要的, !empty() 完成了这项工作,我修改了你的 impolde(' , ' $updates) 。 ' ' ;加上懒惰的东西,我将 LIMIT 1 附加到条件。谢谢它很迷人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多