Это мой простой запрос в 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); ... }