2016-07-21 1 views
0

PHP, en utilisant PDO pour mettre à jour la base de données SQL, ne fait que mettre à jour la dernière requête avec un nombre aléatoire pour l'entrepôt_id dans phpmyadmin.PHP Foreach SQL, INSCRIRE DANS LA MISE À JOUR DE CLÉ DUPLICATE seulement en insérant la dernière requête?

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

J'imprimé les variables étant entrées que vous ne pouvez pas voir avec l'instruction echo:

à la page quand Affichées script est exécuté (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. 

Le seul étant entré est warehouse_id = 2147483647 et warehouse_code = WH1

WH1 est correct, mais d'où vient 2147483647? et pourquoi le reste d'entre eux n'est-il pas entré?

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

Toute aide pourquoi ce fait ce serait génial que je utilise "json_decode ($ data, true);" Si cela aide,

Merci beaucoup!

Répondre

1

J'ai trouvé quelque chose d'utile pour vous, "2147483647" est la taille maximale de Int. Essayez d'utiliser BigInt ou quelque chose de plus élevé.

Si vous avez un seul résultat, c'est parce que votre ID est votre INT, et votre ID est toujours égal à 2147483647, donc vous avez toujours des mises à jour.

Voici le lien: http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

+0

Merci, je dois bien faire des recherches plus que chaque faire, mais oui cela a fonctionné. –