2015-04-26 3 views
0

У меня есть этот код для вытаскивания ВСЕХ пользователей из базы данных. Этот код работает, и показывает всех пользователей из БДОдин 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."&apos;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>"; 
} 
} 

?> 

Благодаря

+3

Вы закрываете инструкцию в цикле for, чтобы вы могли сделать свой второй запрос. Когда первая итерация выполнена, результатов больше нет, потому что запрос закрыт. Чтобы исправить это, переименуйте переменную, которую вы используете для внутреннего запроса SQL, к чему-то другому, что '$ stmt' – andrewsi

+3

Не запускайте запросы в цикле. Перепишите свой первоначальный запрос, чтобы получить нужные данные в одном запросе. –

+0

Имеет смысл, я голосовал за ваши ответы, но теперь я получил вызов функции-члена bind_param ... –

ответ

0

Это потому, что вы переписать первые результаты запроса в переменную $ STMT. Попробуйте это:

<?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()) { 
    $stmt1 = $mysqli->prepare("SELECT picture FROM members WHERE username = ?"); 
    $stmt1->bind_param('s', $postby); 
    $stmt1->execute(); 
    $stmt1->bind_result($picture); 
    while ($stmt1->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>"; 
    } 
} 
$stmt->close(); 

?> 
+0

Это имеет смысл, но теперь я получил вызов функции-члена bind_param в stmt1-> bind_param ('s', $ postby); –

+0

$ stmt1 = $ mysqli-> prepare // здесь задание, поэтому объявлен $ stmt1, или вы этого не спрашивали? – jskidie

+0

Ну, я решил это, переместив звонок на изображение в верхней части кода, так что ему не обязательно быть в то время как stmt ... Во всяком случае, спасибо за ваш ответ, я делаю его лучшим. –

Смежные вопросы