I’m trying to loop through a SQL result in PHP twice, and I am not succeeding. I have tried to use mysqli data seek, but this does not work.
Here is what I have tried so far:
my-new-file.php
JavaScript
x
<?php
class myClass {
function myFunction() {
/*--Connection file for MySQL database. This file works fine.--*/
include $_SERVER['DOCUMENT_ROOT'] . "connection-files/mysqli-connect.php";
if ($result = $mysqli->prepare($query)) {
$result->execute();
$result->bind_result($var1, $var2, $var3);
/*============================================================*/
/*====If I take out all of the code between the = signs, my second while statement works=====*/
$myArray = array();
while ($result->fetch()) {
if (!in_array($var1, $myArray)) {
array_push($myArray, $var1);
}
}
/*--I thought the line below would reset looping through the query.--*/
$result->data_seek(0);
/*====If I take out all of the code between the = signs, my second while statement works=====*/
/*============================================================*/
/*--The second while statement is not echoing anything.--*/
while ($result->fetch) {
echo $var1;
}
}
}
}
$newClass = new myClass;
$newClass->myFunction();
?>
If I do the code below, I get the desired result:
my-newer-file.php
JavaScript
<?php
[All prior code from before ]
while ($result->fetch()) {
if (!in_array($var1, $myArray)) {
array_push($myArray, $var1);
}
}
/*--I thought the line below would reset looping through the query.--*/
$result->data_seek(0);
/*--Executing and binding the results again seems to get the second while statement to work, but running the execution statement twice seems inefficient.--*/
$result->execute();
$result->bind_result($var1, $var2, $var3);
/*--This now works because of the above two lines--*/
while ($result->fetch) {
echo $var1;
}
}
}
}
[All prior code from before ]
?>
It seems like a waste of resources/inefficient to have to run the execute and bind_result statements twice. I was under the assumption that mysqli data seek would reset the pointer to 0, and I could loop through the query again.
This is probably just an oversight on my part. What am I doing wrong?
Advertisement
Answer
Try using $result->store_result();
right after the very first $result->execute().
Seemed to do the trick for me.