2016-07-21 1 views
0

PHP, PDO verwenden, um SQL-Datenbank zu aktualisieren, aktualisiert nur letzte Abfrage mit einer zufälligen Zahl für die Warehouse_id in phpmyadmin.PHP Foreach SQL, INSERT IN DUPLICATE KEY UPDATE nur letzte Abfrage einfügen?

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."; 
    } 

Ich habe die Variablen ausgedruckt Sie nicht mit dem Echo-Anweisung wird Eingabe:

auf Seite angezeigt, wenn Skript (WarehouseID WarehouseCode) ausgeführt wird

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. 

Der einzige eingegeben wird ist warehouse_id = 2147483647 und warehouse_code = WH1

WH1 ist richtig, aber woher kam 2147483647? und warum wird der Rest von ihnen nicht betreten?

Tabellenformat:

-- ----------------------------------------------------- 
-- 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", 
       } 
      ] 
     } 
    ] 
} 

Jede Hilfe, warum dies tut dies wäre toll, ich "json_decode ($ data, true);" bin mit

Wenn das hilft,

Vielen Dank!

Antwort

1

Ich fand etwas nützlich für Sie, "2147483647" ist die maximale Größe von Int.

Versuchen Sie, BigInt oder etwas Höheres zu verwenden.

Wenn Sie nur ein Ergebnis haben, liegt das daran, dass Ihre ID Ihre INT ist und Ihre ID immer gleich 2147483647 ist. Sie haben also immer Updates. Hier

ist der Link: http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

+0

Danke, ich muss eindeutig etwas mehr Forschung tun, die jeweils zu tun, aber ja, das funktioniert. –

Verwandte Themen