Insert/Update 数组数据(如果是新的或存在的)
Insert/Update Array data if new or exist
我有一个表单,可以显示可以编辑的现有数据,还可以添加新数据。我如何更新,如果数据是新的,如何插入?
提交时我发送的数据是这样的:
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'] . "'");
}
}
最简单的方法是检查 MySQL 是否已经给它一个 ID,假设您使用的是 AUTO_INCREMENT
:
$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,您可以查看 REPLACE
,它可以满足您的需要,但是从 MySQL 的角度来看。
仅供参考:查看prepared statements - You should not be using the values directly like you are in PHP, as people can use SQL injection以改变您的意图。
我有一个表单,可以显示可以编辑的现有数据,还可以添加新数据。我如何更新,如果数据是新的,如何插入?
提交时我发送的数据是这样的:
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'] . "'");
}
}
最简单的方法是检查 MySQL 是否已经给它一个 ID,假设您使用的是 AUTO_INCREMENT
:
$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,您可以查看 REPLACE
,它可以满足您的需要,但是从 MySQL 的角度来看。
仅供参考:查看prepared statements - You should not be using the values directly like you are in PHP, as people can use SQL injection以改变您的意图。