插入/更新阵列数据(如果有)

时间:2019-01-10 08:52:06

标签: php opencart

我有一个表格,显示可以编辑的现有数据,并且还允许添加新数据。如何更新,如果数据是新的,如何插入?

提交后,我将发送如下数据:

 Array
(
  ['0'] => Array
    (
        [id] => 19
        [sort_order] => Sort 1
    )

[0] => Array
    (
        [name] => Name 1
    )

['1'] => Array
    (
        [id] => 19
        [sort_order] => Sort 2
    )

[1] => Array
    (
        [name] => Name 2
    )

['2'] => Array
    (
        [id] => 19
        [sort_order] => Sort 2
    )

[2] => Array
    (
        [name] => Name 3
    )

我的插入功能

public function addFilterDamask($data) {
    foreach ($data['filter'] as $filter => $value) {
     $query =   $this->db->query("INSERT INTO `" . DB_PREFIX . "damask_name` SET name = '" . $value['name'] . "', sort_order = '" . (int)$value['sort_order'] . "', filter_id = '" . (int)$value['id'] . "'");
     }

}

1 个答案:

答案 0 :(得分:1)

最简单的方法是在假设您使用AUTO_INCREMENT的情况下,检查MySQL是否已为其提供ID:

$values = [
  [
    'id' => 1,
    'sort_order' => 1,
  ],
  [
    'sort_order' => 2,
  ],
];

foreach ($values as $i => $value) {
  if (array_key_exists('id', $value)) {
    // INSERT
    $values[$i]['id'] == ""; // result from ^
  } else {
    // UPDATE WHERE id == $value['id']
  }
}

或者,如果您要创建ID,则可以从MySQL的角度查看REPLACE,它可以满足您的要求。

仅供参考:检出prepared statements-您不应像在PHP中那样直接使用这些值,因为人们可以使用SQL injection来改变您的意图。