Member 13637584 Ответов: 2

Отображение одного элемента вместо 3 из базы данных


Я получаю некоторую информацию из базы данных.

Таблица имеет идентификатор и имя

Я ищу, чтобы отобразить имена, связанные с этим идентификатором..

Смотрите код ниже, когда я повторяю это, он показывает только одно имя? Даже если 3 связаны с этим пользователем.

Кто-нибудь может помочь?

Что я уже пробовал:

$query = $conn->prepare('SELECT * FROM table1 where UserID=:UserID');
<pre>$dbParams = array(':UserID'=>$UserID);
 $query->execute($dbParams);
while($row = $query->fetch(PDO::FETCH_ASSOC)) {
$names = $row['nameID'];
var_dump($names);



--формат HTML--

<h4 class="button">Names:<?php echo $names ;?></h4>

Jochen Arndt

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

Member 13637584

Извините - опечатка. Проверь сейчас.

Jochen Arndt

Все еще неясно, потому что мы не знаем, когда $names повторяется (внутри или снаружи цикла while).
Но все имена должны быть выброшены.

Member 13637584

var_dump повторяет правильные имена, но когда echo $names находится вне цикла, который находится рядом с HTML, он повторяет только одно имя?

Jochen Arndt

Смотрите решения.

В моем решении используйте print_r() вместо echo() или переменную, присвоенную возвращаемому значению implode ().

2 Ответов

Рейтинг:
13

Jochen Arndt

Ты все переписываешь $names внутри цикла с каждой итерацией:

while ( $row = $query->fetch(PDO::FETCH_ASSOC) ) {
    $names = $row['nameID'];
    var_dump( $names );
}
// Here $names contains the value from the last row

Если вы хотите получить все имена в массиве вы должны сделать это:
$names = array();
while ( $row = $query->fetch(PDO::FETCH_ASSOC) ) {
    // Append to $names
    $names[] = $row['nameID'];
}
// Here $names is an array containing all names
var_dump( $names );
// Or use print_r
print_r( $names );
// Or get a comma separated list
$namesString = implode( ",", $names );


Member 13637584

большое вам спасибо!

Рейтинг:
1

W∴ Balboos, GHB

Похоже, что ваш var_dump($names) запускается для каждой итерации цикла, поскольку он находится внутри фигурных скобок вместе с назначением.

Кроме того, вы продолжаете заменять содержимое $names с каждой итерацией, поэтому он никогда не имеет всех трех значений (поскольку вы используете var_dump() вместо echo, я предполагаю, что это то, что вы хотите).

Вам нужно изменить назначение на:

$names[] = $row['nameID'];
так что он может накапливать все имена в виде массива.

Поскольку остальная часть вашего кода отсутствует, я не могу продвинуться дальше в этом вопросе.