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 数据库,只是将 warehouse_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 语句中看不到的正在输入的变量:
当脚本为 运行 (WarehouseID WarehouseCode)
时显示在页面上
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格式:
-- -----------------------------------------------------
-- 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,所以你总是有更新。
这是 link :
http://dev.mysql.com/doc/refman/5.7/en/integer-types.html
PHP,使用 PDO 更新 SQL 数据库,只是将 warehouse_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 语句中看不到的正在输入的变量:
当脚本为 运行 (WarehouseID WarehouseCode)
时显示在页面上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格式:
-- -----------------------------------------------------
-- 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,所以你总是有更新。
这是 link : http://dev.mysql.com/doc/refman/5.7/en/integer-types.html