[PDO如果ID存在,则在更新时插入MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PDO如果ID存在,则在更新时插入MySQL相关的知识,希望对你有一定的参考价值。

我想用提交表单更新我的sql,如果提交数据不存在,也要插入。

我的SQL数据库是这样的

-------------------------------
| id | plan   | price | percent |
| 1  | Plan 1 |   1   |   115   |
| 2  | Plan 2 |   2   |   117   |
-------------------------------

我的提交表单将在提交后提供此数组。

Array
(
    [plan] => Array
        (
            [0] => Plan 1
            [1] => Plan 2
            [2] => Plan 3
        )

    [price] => Array
        (
            [0] => 1.00000000
            [1] => 2.00000000
            [2] => 5.00000000
        )

    [percent] => Array
        (
            [0] => 115.0000
            [1] => 117.0000
            [2] => 120.0000
        )

)

如果我提交的数据的ID相同,我想更新mysql数据库。

提交表单后,数组如下:>

Array
(
    [plan] => Array
        (
            [0] => Plan 1
            [1] => Plan 2
            [2] => Plan 3
        )

    [price] => Array
        (
            [0] => 10.00000000
            [1] => 20.00000000
            [2] => 5.00000000
        )

    [percent] => Array
        (
            [0] => 120.0000
            [1] => 125.0000
            [2] => 130.0000
        )

)

我已经创建了此PDO

$totalData = sizeof($data['plan']);
for($i=0;$i<$totalData;$i++) {
    print_r($data['price'][$i]);
    $stmt = $conn->prepare("INSERT INTO plans_sub 
                    (plan, price, percent, main_id) 
             VALUES (:plan, :price, :percent, :main_id) 
             ON DUPLICATE KEY UPDATE 
                plan = :planOne, 
                price = :priceOne, 
                percent = :percentOne, 
                main_id = :main_idOne");
      $stmt->bindValue(':plan', isset($data['plan'][$i]) ? $data['plan'][$i] : NULL);
      $stmt->bindValue(':price', isset($data['price'][$i]) ? $data['price'][$i] : NULL);
      $stmt->bindValue(':percent', isset($data['percent'][$i]) ? $data['percent'][$i] : NULL);
      $stmt->bindValue(':main_id', $_POST['id']);
      $stmt->bindValue(':planOne', isset($data['plan'][$i]) ? $data['plan'][$i] : NULL);
      $stmt->bindValue(':priceOne', isset($data['price'][$i]) ? $data['price'][$i] : NULL);
      $stmt->bindValue(':percentOne', isset($data['percent'][$i]) ? $data['percent'][$i] : NULL);
      $stmt->bindValue(':main_idOne', $_POST['id']);
      $stmt->execute();
}

提交表单后,代码总是在mysql数据库中为我提供新数据,而不是以前更新相同的数据。

-------------------------------
| id | plan   | price | percent |
| 1  | Plan 1 |   1   |   115   |
| 2  | Plan 2 |   2   |   117   |
| 3  | Plan 1 |   1   |   115   |
| 4  | Plan 2 |   2   |   117   |
| 5  | Plan 1 |   1   |   115   |
| 6  | Plan 2 |   2   |   117   |
-------------------------------

我想要的是更新数据(如果存在的话),并添加新数据(如果它们不在数据库中。)>

我想要的是如果存在则更新数据,如果不存在则添加新数据

-------------------------------
| id | plan   | price | percent |
| 1  | Plan 1 |   10   |   120   |
| 2  | Plan 2 |   20   |   125   |
| 3  | Plan 3 |   50   |   130   |
-------------------------------

请帮助我

==============================编辑================= ============

CREATE TABLE `plans_sub` (
  `id` int(11) NOT NULL,
  `plan` varchar(250) DEFAULT NULL,
  `price` decimal(20,8) DEFAULT NULL,
  `percent` decimal(20,4) DEFAULT NULL,
  `main_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `plans_sub` (`id`, `plan`, `price`, `percent`, `main_id`) VALUES
(1, 'Plan 1', '1.00000000', '50.0000', 1),
(2, 'Plan 1', '1.00000000', '115.0000', 2),
(3, 'Plan 2', '2.00000000', '117.0000', 2),

ALTER TABLE `plans_sub`
  ADD PRIMARY KEY (`id`);

我想用提交表单更新我的sql,如果提交数据不存在,也要插入。我的SQL数据库是这样的------------------------------- | id |计划价格|百分比| 1 | ...

答案

这里是解决方法。

只需在准备好的语句中添加ID

以上是关于[PDO如果ID存在,则在更新时插入MySQL的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如果 table1 中的行存在,则在 table2 上插入行

如果记录已存在,则为 PDO 数组

Mysql 存在既更新,不存在就添加(sql语句)

PDO:lastInsertId 返回啥值? [复制]

如果字段的值为空,则在 MySQL 中插入新记录,同时在不同的字段中添加 ID+1

使用 PDO 插入时获取自动递增行 ID [重复]