2012-09-20 3 views
1

Voir le code ci-dessous, il vérifie si les données existent dans le tableau, s'il n'existe pas alors insérez-le ou mettez à jour le tableau. Comme vous pouvez le voir, ça a l'air un peu brouillon - est-il possible d'améliorer la logique du code ou quelque chose de plus petit? J'ai quelques tables qui ont besoin de faire la même chose.Cocher pour insérer ou mettre à jour le tableau

foreach ($sheet as $data) { 
    // Get Phone ID 
    $dataPhoneID = mysql_escape_string($data['handset']['phone_id']); 

    if (isset($stocks[$dataPhoneID])) { 
     $stockPhone = $stocks[$dataPhoneID ]; 
     $phoneName = mysql_escape_string($stockPhone['description']); 
     $stock = mysql_escape_string($stockPhone['stock']); 

     $SQL = "SELECT * FROM phone_affiliate WHERE affiliate_id = 1 AND affiliate_phone_id = '$dataPhoneID'"; 
     $q = mysql_query($SQL); 
     if (mysql_num_rows($q) == 0) { 
      $SQLInsert = "INSERT INTO phone (name) VALUE('$phoneName')"; 
      if (mysql_query($SQLInsert)) { 
       $phone_id = mysql_insert_id(); 
       $SQLInsert = "INSERT INTO phone_affiliate (phone_id, affiliate_id, affiliate_phone_id, stock) "; 
       $SQLInsert .= "VALUE('$phone_id', '1', '$dataPhoneID', '$stock')"; 
       mysql_query($SQLInsert) or die(mysql_error()); 
      } 
     } else { 
      $row = mysql_fetch_assoc($q); 
      $phone_id = $row['phone_id']; 
      $SQLUpdate = "UPDATE phone_affiliate set stock = '$stock' WHERE affiliate_id = 1 AND phone_id = $phone_id"; 
      mysql_query($SQLUpdate) or die(mysql_error()); 
     } 

     // Similar code block above for other tables. 
    } 
} 

Remarque: Je suis au courant de PDO mais je n'ai pas le temps de le remplacer sur le système existant.

+0

'mysql_escape_string'? L'utilisation au large de 'mysql_real_escape_string' (qui elle-même a été dépréciée ....) utilise PDO ou mysqli, pas d'alternatives. Et, en s'appuyant sur des fonctions dépréciées signifie, des maux de tête plus tard. – itachi

Répondre

5

Utilisez le REPLACE INTO ou INSERT... ON DUPLICATE KEY UPDATE de mysql. Par exemple:

foreach ($sheet as $data) { 
    // Get Phone ID 
    $dataPhoneID = mysql_escape_string($data['handset']['phone_id']); 

    if (isset($stocks[$dataPhoneID])) { 
     $stockPhone = $stocks[$dataPhoneID ]; 
     $phoneName = mysql_escape_string($stockPhone['description']); 
     $stock = mysql_escape_string($stockPhone['stock']); 

     $SQLInsert = "INSERT INTO phone_affiliate (affiliate_id, affiliate_phone_id, stock) "; 
     $SQLInsert .= "VALUES ('1', '$dataPhoneID', '$stock') "; 
     $SQLInsert .= "ON DUPLICATE KEY UPDATE stock = '$stock'"; 
     mysql_query($SQLInsert); 
     if (mysql_insert_id()) { 
      $SQLInsert = "INSERT INTO phone (name) VALUE('$phoneName')"; 
      mysql_query($SQLInsert); 
      $phone_id = mysql_insert_id(); 
      $SQLUpdate = "UPDATE phone_affiliate set phone_id = $phone_id WHERE affiliate_id = 1 AND affiliate_phone_id = $dataPhoneID_id"; 
     } 
    } 
} 
+0

S'il vous plaît montrer l'exemple pour ce faire à partir de mon exemple de code. –

+0

Vous essayez de réécrire votre exemple avec ces instructions, mais je ne connais pas suffisamment votre modèle, comme les clés uniques et pourquoi vous insérez toujours dans le téléphone si aucun enregistrement n'existe dans phone_affiliate. –

+0

Si les données n'existent pas dans 'phone_affiliate', il insère un enregistrement dans les tables' phone' et 'phone_affiliate'. Si l'enregistrement existe déjà dans 'phone_affiliate', il suffit de le mettre à jour. Comprenez vous? –

0

vous pouvez également utiliser IGNORE INSERT construction

Questions connexes