2008-09-22 9 views
11

क्या MySQLi prepared statementfetch() पिछले बयान के कॉल के भीतर संभव है? यदि नहीं, तो इसके चारों ओर सबसे अच्छा तरीका क्या है?एकाधिक/नेस्टेड MySQLi कथन का उपयोग करना संभव है?

उदाहरण कोड:

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(); 
     } 
    } 
} 

उत्तर

1

आप ऐसा करने में सक्षम होना चाहिए, हालांकि आप एक दूसरे कनेक्शन शुरू कर दिया है सकते हैं।

+1

एक दूसरा कनेक्शन काम करता है, यह सबसे अच्छा तरीका है? – Gilean

13

यह एकल कनेक्शन तरीका है:

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(); 
     } 
    } 
} 
संबंधित मुद्दे