2008-09-22 3 views
11

Возможно ли иметь MySQLi prepared statement в пределах fetch() созыв предыдущего заявления? Если нет, то как лучше всего это сделать?Можно использовать несколько/вложенных операторов 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 2008-09-22 17:27:08

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(); 
     } 
    } 
} 
Смежные вопросы