У меня есть этот код для вытаскивания ВСЕХ пользователей из базы данных. Этот код работает, и показывает всех пользователей из БДОдин mysqli работает, а другой нет ..?
<?php
$sqlsel = "SELECT picture,username,email,configured,gender FROM members ORDER BY username";
$stmt = $mysqli->prepare($sqlsel);
$stmt->execute();
$stmt->bind_result($profpicture,$uname,$email,$confred,$gender);
while($stmt->fetch())
{
if(empty($profpicture)){
echo "<img src='profile_pictures/public_icon.png' width='50' height='50'><br>";}else {
echo " <div class='img'><img src='profile_pictures/".$profpicture."' alt='Profile Pic'></div><br>";
}
echo "<b>Email:</b> ".$email."<br> ";
if($gender == Woman){
$gen = her;
}
else{
$gen = his;
}
echo "<b>Username: </b>".$uname." </p> ";
if(empty($confred)){
echo "<font color='#FF4747'>".$uname." has not configured ".$gen." account yet.</font>";
} else{
echo "<form action='".$uname.".php'>
<input type='submit' class='buttondiv' value='Visit ".$uname."'s Profile'>
</form>";
}
echo "<hr class='hr' />";
}
?>
И поэтому я сделал почти то же самое, но с постами. Он должен вытащить все сообщения из базы данных, но он показывает только первый ... Почему?
<?php
$selectposts = "SELECT postby,posttxt,time FROM posts ORDER BY time";
$stmt = $mysqli->prepare($selectposts);
$stmt->execute();
$stmt->bind_result($postby,$posttxt,$posttime);
while($stmt->fetch()){
$stmt->close();
$stmt = $mysqli->prepare("SELECT picture FROM members WHERE username = ?");
$stmt->bind_param('s', $postby);
$stmt->execute();
$stmt->bind_result($picture);
while ($stmt->fetch()){
if(empty($picture)){
$profpicturefromdb = " <img src='profile_pictures/public_icon.png' width='25' height='25' class='fxdmimg'>";
} else {
$profpicturefromdb = " <img width='25' class='fxdmimg' height='25' src='profile_pictures/".$picture."' alt='Profile Picture'>";
}
echo
"<p><center><div class='postdv'>
<b>".$profpicturefromdb."
<h3>".$postby."</h3></b><font color='#000'>
[ ".$posttime." ]</font><hr class='hr'>
<font color='#000'>".$posttxt."</font><hr class='hr'>
<form method='POST'>
<input type='submit' name='voteup' class='voteup' value='Up'>
<input type='submit' name='votedown' class='votedown' value='Down'>
</form>
</center>
</div>";
}
}
?>
Благодаря
Вы закрываете инструкцию в цикле for, чтобы вы могли сделать свой второй запрос. Когда первая итерация выполнена, результатов больше нет, потому что запрос закрыт. Чтобы исправить это, переименуйте переменную, которую вы используете для внутреннего запроса SQL, к чему-то другому, что '$ stmt' – andrewsi
Не запускайте запросы в цикле. Перепишите свой первоначальный запрос, чтобы получить нужные данные в одном запросе. –
Имеет смысл, я голосовал за ваши ответы, но теперь я получил вызов функции-члена bind_param ... –