php - 根据用户从数组输入更新数据库

标签 php mysql

用户输入的数据:

"product_description": [{
    "language_id": 1,
    "name": "okayt321sd1a"
}

更新数据库:

foreach ($data['product_description'] as $product_description) {
    foreach ($product_description as $key => $value) {
        $a[$key] = $value;

        if($a[$key]){
            $this->db->query("UPDATE " . DB_PREFIX . "product_description SET language_id = '" . (int)$language_id . "', name = '" . $this->db->escape(html_entity_decode($product_description['name'])) . "', meta_keyword = '" . $this->db->escape(html_entity_decode($product_description['meta_keyword'])) . "', meta_description = '" . $this->db->escape(html_entity_decode($product_description['meta_description'])) . "', description = '" . $this->db->escape($product_description['description']) . "', tag = '" . $this->db->escape($product_description['tag']) . "',
                                  page_title = '" . $this->db->escape($product_description['page_title']) . "',
                                  highlight = '" . $this->db->escape($product_description['highlight']) . "',
                                  whatbox = '" . $this->db->escape($product_description['whatbox']) . "' WHERE product_id = '" . (int)$product_id . "', 
                              ");
        }
    }
}

如何根据用户输入更新数据,例如,如果用户输入

"language_id": 1,
"name": "okayt321sd1a"

那么我只更新这2个数据到数据库其他数据将保留,如果输入3个数据:

"language_id": 1,
"name": "okayt321sd1a"
page_title

那么我只更新这3条数据到数据库,其他数据将保留。

最佳答案

您可能想要执行一个函数来为您构建 sql。我假设您正在使用 PDO(我不知道,但此示例使用 PDO)。您应该以任何一种方式绑定(bind)参数/值。要添加自定义字段,只需使用array_merge()。您可以使用 array_diff()unset() 删除不需要的值/键:

function updateProductDesc($array,$where,$db)
    {
        foreach($array as $key => $value) {
            $sKey           =   ":{$key}";
            $bind[$sKey]    =   htmlspecialchars($value);
            $sql[]          =   "`{$key}` = {$sKey}";
        }

        $bind[":where"] =   (int) $where;
        $query  =   $db->prepare("UPDATE ".DB_PREFIX."product_description SET ".implode(", ",$sql)." WHERE `product_id` = :where");
        $query->execute($bind);
    }

foreach ($data['product_description'] as $product_description) {
    foreach ($product_description as $key => $value) {
        $a[$key] = $value;
        if($a[$key]){
            updateProductDesc($product_description,$product_id,$this->db);
        }
    }
}

关于php - 根据用户从数组输入更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033592/

相关文章:

php - 尝试使用 datagrip IDE 更新表 mySql 中的日期

php - Zend 应用程序未安装 MySql 驱动程序错误

MySQL将float字段中的数据转换为decimal字段

php - Symfony2 创建和持久化实体关系

mysql - MYSQL中如何通过相关表过滤具有多种特征的资源

c# - 使用 c#.net 对 gridview 的最后两行进行减法

php - 键->值数据有哪些好的、快速的持久存储选项?

php - 当屏幕太大时,如何使图像放大而不拉伸(stretch)?

php - SQL/PHP : Update result from select query

mysql - 删除查询抛出 : Error 1062 Duplicate entry 'X-Y' for key; but no duplicates in table