Здесь он работает из WHILE. Внутри это не работает, почему?

Внутри WHILE находится аватар (); не работа. И он работает вне WHILE. Как я могу использовать функцию внутри WHILE?

try{ $this->conex->beginTransaction(); $query = $this->conex->prepare("SELECT idUser FROM usuario WHERE id = :id ORDER BY data DESC LIMIT $pagin, $paginaF"); $query->bindParam(":id", $ID, PDO::PARAM_INT, 20); $query->execute(); while ($lista = $query->fetch()){ $idUser = $lista['idUser']; echo "<div id='avatar'>"box::avatar($idUser)."</div>"; } //Here he works out of WHILE. Inside it does not work... echo box::avatar($idUser); $this->conex->commit(); }catch (PDOException $ex) { echo "Erro: " . $ex->getMessage(); } public function avatar($idUser){ $idUser = (int) $idUser; $query = $this->conex->prepare("SELECT avatar FROM login WHERE id = :id LIMIT 1"); $query->bindParam(":id", $idUser, PDO::PARAM_INT, 20); $query->execute(); while ($avatar = $query->fetch()){ $avatar = $avatar['avatar']; } return $avatar; } 

PDO не поддерживает вложенные запросы.

Сначала вам нужно сначала прочитать весь набор идентификаторов в массиве, а затем снова выполнить цикл над этим массивом для создания вашего вывода, например:

  $ids = array(); $query->execute(); while ($lista = $query->fetch()){ $ids[] = $lista['idUser']; } foreach ($ids as $idUser) { echo "<div id='avatar'>" . box::avatar($idUser) . "</div>"; } 

Синтаксическая ошибка: вам не хватает точки конкатенации:

 echo "<div id='avatar'>" . box::avatar($idUser)."</div>" 

Поскольку в вашей таблице нет записей, соответствующих условию