Хранить и перебирать результат запроса в mysqli

Это мой простой запрос в php, используя объектно-ориентированный стиль mysqli:

$query = "SELECT name FROM usertable WHERE id = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('i', $id); $id= $_GET['id']; $stmt->execute(); $stmt->bind_result($name); while($stmt->fetch()){ echo $name." "; } $stmt->free_result(); $stmt->close(); 

Это прекрасно работает. Я получаю список имен, полученных из оператора select.

Теперь, в то время как я хочу использовать переменную $name качестве параметра для другого запроса, но mysqli не допускает этого, так как мне нужно закрыть первый запрос, а затем вызвать второй запрос.

Поэтому я думаю, что мне нужно сохранить результат первого запроса, а затем перебрать результат, вызвав новый запрос.

Я пробовал следующее:

 $query = "SELECT name FROM usertable WHERE id = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('i', $id); $id= $_GET['id']; $stmt->execute(); //$stmt->bind_result($name); $result = $stmt->store_result(); $stmt->free_result(); $stmt->close(); while ($row = $result->fetch_row()) { echo $row[0]." "; } 

Но это не работает. Код внутри пока не достигается.

NB : Я хочу избежать использования multi_query() .

Я решил проблему:

 $query = "SELECT name FROM usertable WHERE id = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('i', $id); $id= $_GET['id']; $stmt->execute(); $result = $stmt->get_result(); $stmt->free_result(); $stmt->close(); while ($row = $result->fetch_array(MYSQLI_NUM)) { echo $row[0]." "; } 

Просто используя get_result() и fetch_array()

mysqli_stmt :: store_result возвращает логическое значение. Согласно документу, это должно быть примерно так:

 $stmt->execute(); $stmt->store_result(); $stmt->bind_result($name); while($stmt->fetch()){ //echo $name." "; // try another statement $query = "INSERT INTO usertable ..."; $stmt2 = $mysqli->prepare($query); ... } $stmt->free_result(); $stmt->close(); в $stmt->execute(); $stmt->store_result(); $stmt->bind_result($name); while($stmt->fetch()){ //echo $name." "; // try another statement $query = "INSERT INTO usertable ..."; $stmt2 = $mysqli->prepare($query); ... } $stmt->free_result(); $stmt->close(); 

Если это не сработает, вы можете сначала собрать все строки в массив и затем снова зациклировать этот массив:

 $stmt->execute(); $stmt->bind_result($name); $names = array(); while($stmt->fetch()){ $names[] = $name; } $stmt->free_result(); $stmt->close(); foreach($names as $name) { $query = "INSERT INTO usertable ..."; $stmt = $mysqli->prepare($query); ... } в $stmt->execute(); $stmt->bind_result($name); $names = array(); while($stmt->fetch()){ $names[] = $name; } $stmt->free_result(); $stmt->close(); foreach($names as $name) { $query = "INSERT INTO usertable ..."; $stmt = $mysqli->prepare($query); ... }