2013-08-26 25 views
0

나는이 페이지에서 일부 편집 기능과 함께 로그온 한 사용자 프로필을 빠르게 볼 수 있습니다. 따라서 혼동을 피하기 위해 모든 코드를 게시하려고합니다. 단지 html을 무시하십시오. .다중 배열에 다중 SQL 쿼리

코드 시작 부분에서 사용자 정보를 검색 한 다음 $ row라는 배열에 저장합니다. 나중에 코드를 내려 놓고 별도의 테이블에서 행을 가져오고 배열에 배열을 저장하려고합니다 ($ postRow). 그러나 나는 방금 읽은 것을 통해 당신이 이해할 수없는 코드를 실행하지 않고 페이지 당 하나의 SQL 쿼리를 수행 할 수 있다는 것을 알아 냈습니다. 그리고 그 문제와 관련하여 찾은 유일한 코드는 페이지에 직접 정보를 인쇄했습니다. 둘 다 배열에 저장하는 방법을 찾지 못했습니다. 누군가이 문제와 관련하여 도움을 줄 수 있습니까? 나는 정말로 바위와 어려운 곳 사이에있어.

<?php 
    include('header.php'); 
    if (isset($_SESSION['username'])){ 
     require 'connect.php'; 

     $user = $_SESSION['username']; 

     $query = mysqli_query($connect, "SELECT * FROM users WHERE username='$user';", MYSQLI_USE_RESULT); 
     $row = mysqli_fetch_assoc($query); 
     ?> 
     <h4>BlogHub > Profile > <?php echo $row['fname']." ".$row['lname']; ?></h4> 
     <div id="profileAva"> 
      <img src="<?php echo $row['avatar']; ?>" /> 
     </div> 
     <h5 id="infoDisp" style="margin:3px;"><?php echo "ID #".$row['ID']." - ".$row['fname']." ".$row['lname']." - ".$row['username']." - ".$row['email']." - ".$row['posts']." Posts"; ?></h5> 
     <?php 
     $id = $row['ID']; 
     $recentPost = mysqli_query($connect, " 
     SELECT * 
     FROM `blog_posts` 
     WHERE poster_id='$id' 
     LIMIT 1 
     ", MYSQLI_USE_RESULT); 
     $postRow = mysqli_fetch_assoc($recentPost); 
     ?> 
     <p></p> 
     <div id="changeAva"> 
      <button class="cancelQuery">x</button> 
      <center> 
      <form style="padding-top:20px;" class="boxI" enctype="multipart/form-data" action="changeAva.php" method="POST"> 
       <input style="padding-bottom:15px;" type="file" value="Choose a Avatar" name="file"/><br /> 
       <button type="Submit">Submit</button> 
      </form> 
      </center> 
     </div> 
     <div id="changeInfoBox"> 
      <button class="cancelQuery">x</button> 
      <center> 
       <form action="changeInfo.php" method="POST"> 
        First Name: <input type="text" name="fname" value="<?php echo $row['fname']; ?>" /><br /> 
        Last Name: <input type="text" name="lname" value="<?php echo $row['lname']; ?>" /><br /> 
        Email: <input type="text" name="email" value="<?php echo $row['email']; ?>" /><br /> 
        <button type="submit">Submit</button> 
       </form> 
      </center> 
     </div> 
     <?php 
    } 
    else { 
     echo "<center><p>You need to be logged in to view this page.</p></center>"; 
    } 
    include('footer.php'); 
?> 

답변

0

스크립트 실행 중에 실행되는 쿼리 수에는 제한이 없습니다. 그러나 단일 쿼리에서이 정보를 얻을 수있는 이유는 없습니다. 이 작업을 수행하려면 JOIN을 사용하십시오.

이는 다음과 같습니다

SELECT bp.* 
FROM users AS u 
INNER JOIN blog_posts AS bp 
    ON u.id = bp.poster_id 
WHERE u.username = '?' 

다른 대답 코멘트에 언급 특별한 문제는 당신이 당신의 다음 질의를하기 전에 mysql_free_result()를 호출 할 필요가 있기 때문이다.

+0

그러나 해당 사용자의 가장 최근 게시물 (1 개 게시물) 만 원한다면 여전히 내부 가입을 사용해야합니까? –

+0

오, 젠장, 너의 MYSQL_USE_RESULT는 나를 지켜 주었다. 마이크 덕분이야. 고맙습니다. –

+0

@GeorgeColeman 입력이 사용자 이름 (사용자 테이블)이지만 'blog_posts'에서 찾고있는 데이터 인 경우이 데이터를 단일 쿼리로 가져오고 싶다면 조인을해야합니다. 현재 당신과 같은 두 가지 질문이 있습니다. –