2008-09-22 5 views
11

Est-il possible d'avoir un MySQLi prepared statement dans l'appel fetch() d'un relevé précédent? Si non, quelle est la meilleure façon de le contourner?Possibilité d'utiliser des instructions MySQLi multiples/imbriquées?

Exemple Code:

if($stmt = $link->prepare("SELECT item FROM data WHERE id = ?")) { 
    $stmt->bind_param("i", $id); 
    $stmt->execute(); 
    $stmt->bind_result($item); 
    while($stmt->fetch()) { 
     /* Other code here */ 
     $itemSummary = $item + $magic; 
     if($stmt2 = $link->prepare("INSERT INTO summaries (itemID, summary) VALUES (?, ?)")) { 
      $stmt2->bind_param("is", $itemID, $itemSummary); 
      $stmt2->execute(); 
      $stmt2->close(); 
     } 
    } 
} 

Répondre

1

Vous devriez être en mesure de le faire, même si vous devez faire commencer une seconde connexion.

+1

Une deuxième connexion fonctionne, est-ce la meilleure façon? – Gilean

13

C'est le moyen de connexion simple:

if($stmt = $link->prepare("SELECT item FROM data WHERE id = ?")) { 
    $stmt->bind_param("i", $id); 
    $stmt->execute(); 
    $stmt->store_result(); // <-- this 
    $stmt->bind_result($item); 
    while($stmt->fetch()) { 
     /* Other code here */ 
     $itemSummary = $item + $magic; 
     if($stmt2 = $link->prepare("INSERT INTO summaries (itemID, summary) VALUES (?, ?)")) { 
      $stmt2->bind_param("is", $itemID, $itemSummary); 
      $stmt2->execute(); 
      $stmt2->store_result(); // <-- this 
      /*DO WHATEVER WITH STMT2*/ 
      $stmt2->close(); 
     } 
    } 
} 
Questions connexes