PHP Foreach SQL,INSERT INTO ON DUPLICATE KEY UPDATE仅插入最后一个查询


PHP Foreach SQL, INSERT INTO ON DUPLICATE KEY UPDATE only inserting last query?

PHP使用PDO更新SQL数据库,只是将仓库id的最后一个查询用随机数更新到phpmyadmin中。

function updateWarehouses(){

    global $tvHost, $handler, $apiRequestCall, $sqlError;

    $apiUpdateWarehouses = apiRequestCall("GET", $tvHost, "Product?pageNumber=1");
    $updates = 0;
    foreach($apiUpdateWarehouses['List'] as $c){
        foreach($c['PerWarehouseInventory'] as $i) {
            try {
                    $sql = $handler->prepare("INSERT INTO tv_warehouse (warehouse_id, code) VALUES (:warehouse_id, :code) ON DUPLICATE KEY UPDATE warehouse_id=:warehouse_id, code=:code");
                    echo "<br>".$i['WarehouseID']." ".$i['WarehouseCode'];
                    $sql->execute([
                    ':warehouse_id' => $i['WarehouseID'],
                    ':code' => $i['WarehouseCode']]
                    );
                    $updates++;
                }
            catch(Exception $er) {
                    sqlError($er, $table);
                    die();
            }
            } 
        }
        echo "<br>".$updates." warehouses updated.";
    }

我已经打印出了你在echo语句中看不到的输入变量:

运行脚本时显示在页面上(仓库ID仓库代码)

3.5284454726114E+18 Demo
3.5284455793003E+18 Temp Rework
3.5950682694297E+18 TL-Shipments
3.5897270029153E+18 TL-Supplier
3.4684900596836E+18 WH1
5 warehouses updated.

唯一输入的是warehouse_id=2147483647和warehouse_code=WH1

WH1是正确的,但是2147483647是从哪里来的?为什么他们中的其他人没有进入?

表格格式:

-- -----------------------------------------------------
-- Table `Data`.`tv_warehouse`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Data`.`tv_warehouse` (
  `code` VARCHAR(45) NOT NULL,
  `warehouse_id` INT(30) NOT NULL,
  PRIMARY KEY (`warehouse_id`))
ENGINE = InnoDB;

JSON:

{
    "List": [
        {
            "PerWarehouseInventory": [
                {
                    "WarehouseID": 3528445472611403000,
                    "WarehouseCode": "Demo",
                },
                {
                    "WarehouseID": 3528445579300286000,
                    "WarehouseCode": "Temp Rework",
                },
                {
                    "WarehouseID": 3595068269429729300,
                    "WarehouseCode": "TL-Shipments",
                },
                {
                    "WarehouseID": 3589727002915314000,
                    "WarehouseCode": "TL-Supplier",
                },
                {
                    "WarehouseID": 3468490059683634700,
                    "WarehouseCode": "WH1",
                }
            ]
        }
    ]
}

任何关于为什么要这样做的帮助都将是伟大的,我正在使用"json_decode($data,true);"

如果这有帮助的话,

非常感谢!

我发现了一些对你有用的东西,"2147483647"是Int.的最大大小

尝试使用BigInt或更高版本。

如果你只有一个结果,那是因为你的ID是你的INT,而你的ID总是等于2147483647,所以你总是有更新。

以下是链接:http://dev.mysql.com/doc/refman/5.7/en/integer-types.html