2013-02-10 132 views
0

我想弄清楚如何在另一个准备好的staments循环中运行第二个准备好的语句。不是最佳的,但不知道我还能怎么解决这个...准备好的语句嵌套在另一个准备的语句

这里就是我想:

$stmt = $mysqli->stmt_init(); 

### GET THE CURRENT USERS FRIENDS ### 
$sql = "SELECT f.fk_user_id2 
      , u.username 
      , u.profileimg FROM ".$prefix."_friends f 
       INNER JOIN ".$prefix."_users u 
        ON f.fk_user_id2 = u.id  
      WHERE f.fk_user_id1 = ? ORDER BY u.username ASC"; 

if($stmt->prepare($sql)){ 

    $stmt->bind_param('i',$playerid); 
    $stmt->execute(); 
    $stmt->bind_result($userPoints); 
    while ($stmt->fetch()){ 

     $friendid = $row1['fk_user_id2']; 
     $friendname = $row1['username']; 
     if(empty($row1['profileimg'])){ 
      $profileimg = 'http://duefmun.dk/profileimages/noimage.png'; 
     } else { 
      $profileimg = 'http://duefmun.dk/profileimages/'.$row1['profileimg']; 
     } 

     ### GET THE HISTORY ### 
     $sql1 = mysql_query("SELECT wins, games FROM ".$prefix."_newversus WHERE fk_player=? AND fk_opponent=?"); 
     if($stmt->prepare($sql1)){ 
      $stmt->bind_param('ii',$playerid,$friendid); 
      $stmt->execute(); 
      $stmt->bind_result($wins,$games); 
      $stmt->fetch(); 

      if($games == 0){ 
       $history = $languagestring[165]; 
      } else { 
       $history = $languagestring[168].' '.$wins.' '.$languagestring[169].' '.$games.' '.$languagestring[170]; 
      } 
     } 

     $string .= $friendname.','.$friendid.','.$history.','.$profileimg.'^'; 

    } 
} 

$string = substr($string,0, (strlen($string)-1)); 
echo $string.'%'; 

$stmt->close(); 

也许有可能innerjoin第二个语句,但不知道怎么样。请帮忙在此先感谢: -/

+0

为什么'朋友'和'newversus'绑定到表名?这相当于使用关系数据库的目的。 – ethrbunny 2013-02-10 13:02:48

回答

0

这不是一份准备好的声明是你的问题,而只是一个变量
你只是重写你的变量,在这种情况下$语句。
给它第二个循环的另一个名称(并检查其他变量invdved)

+0

好吧,但这又如何:$ stmt = $ mysqli-> stmt_init();我应该每次都开始一个新的? – Mansa 2013-02-10 15:26:36