пожалуйста, ознакомьтесь с моим кодом ниже. С этим классом я могу показывать результаты следующим образом:
$connectTest = new testResults(); $test = $connectTest->grabResults(test, id, id); echo $test['id']; echo $test['name']; echo $test['address'];
В моей базе данных у меня есть несколько полей в таблице «test». Я перехожу на свою страницу, используя index.php? Id = 1. При этом я показываю только результаты из одной строки, потому что он захватывает все результаты WHERE id = 1.
Мне нужен класс ниже для отображения нескольких результатов. Он отображает только одну строку. Но если у меня несколько строк с id = 1, я бы хотел отобразить эти результаты, но я не могу заставить его работать. Я пробовал много вещей, но всегда получаю только один результат.
класс:
class testResults { public function grabResults($table, $field, $id) { $result = $this->db->mysqli->query("SELECT * FROM $table WHERE $field = $id"); $resultData[] = array(); if(!$result) { return false; } while($row = $result->fetch_assoc()) { $rows[] = $row; } foreach ($rows as $resultData) { return $resultData; } } }
Редактировать:
Array ( [id] => 25 [name] => test [status] => 1 ) Array ( [id] => 25 [name] => test [status] => 3 ) Array ( [id] => 25 [name] => test [status] => 5 ) Array ( [id] => 25 [name] => test [status] => 4 ) Array ( [id] => 26 [name] => test [status] => 1 ) Array ( [id] => 26 [name] => test [status] => 3 ) Array ( [id] => 27 [name] => test [status] => 1 ) Array ( [id] => 27 [name] => test [status] => 3 ) Array ( [id] => 27 [name] => test [status] => 5 ) Array ( [id] => 27 [name] => test [status] => 4 ) Array ( [id] => 27 [name] => test [status] => 2 ) Array ( [id] => 27 [name] => test [status] => 4 ) Array ( [id] => 27 [name] => test [status] => 1 )
Я получаю результаты, как указано выше, любой способ легко отображать эти результаты в эхо? Для каждого идентификатора существуют разные результаты, поэтому результаты будут варьироваться в зависимости от каждого запроса. Поэтому я хотел бы отображать результаты в таблице, например, так:
echo '<table> <tr> <td>$id</td> <td>$name</td> <td>$status</td> </tr> </table>';
Таким образом, все результаты будут отображаться как в цикле while.
Вы можете просто вернуть массив из функции, а затем выполнить цикл в вашем скрипте
while($row = $result->fetch_assoc()) { $rows[] = $row; } return $rows;
Вы можете зацикливаться на своем скрипте
$test = $connectTest->grabResults(test, id, id); foreach($test as $value) { print_r($value); }
После редактирования OP
Если вам нужно распечатать их отдельно, вы можете получить доступ ко всем элементам с именами переменных и областями с помощью клавиш, как следует
$test = $connectTest->grabResults(test, id, id); echo '<table>'; foreach($test as $value) { echo '<tr> <td>'.$value['id'].'</td> <td>'.$value['name'].'</td> <td>'.$value['status'].'</td> </tr>'; } echo '</table>';
Похоже, вы возвращаете одну строку своих результатов с помощью этого бита функции:
foreach ($rows as $resultData) { return $resultData; }
Вы должны просто вернуть все это.
while($row = $result->fetch_assoc()) { $rows[] = $row; } return $rows;
return
foreach()
Итерация означает остановку сразу после первой итерации. Поэтому вы всегда будете получать только первый результат.
Вам лучше написать это как:
public function grabResults($table, $field, $id) { $result = $this->db->mysqli->query("SELECT * FROM $table WHERE $field = $id"); $rows = array(); while($row = $result->fetch_assoc()) { $rows[] = $row; } return $rows; }