Tutorial :Possible to use multiple/nested MySQLi statements?



Question:

Is it possible to have a MySQLi prepared statement within the fetch() call of a previous statement? If not, what's the best way around it?

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


Solution:1

You should be able to do that, although you make have to start a second connection.


Solution:2

This is the single connection way:

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


Solution:3

Or use store_result.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »