2013-06-14 3 views
0

배열이 (1, 4, 2, 3)처럼 보입니다. 내가 하나 개 이상의 결과를하면서, 그것은 단지 데이터베이스에서 하나 개의 항목을 가져옵니다,db에서 배열에있는 모든 항목을 선택 하시겠습니까?

$get = $pdo->prepare("SELECT * FROM mybb_threads ORDER BY replies DESC LIMIT 10"); 
$get->execute();      
$array = $get->fetchAll(PDO::FETCH_COLUMN, 0); 

$new = $pdo->prepare("SELECT * FROM mybb_posts WHERE replyto = 0 AND tid IN (:ids) LIMIT 10"); 
$new->execute(array(":ids" => implode(",", $array))); 

을하지만 : 나는 배열에 열 TID,이 숫자 중 하나를 포함하는 모든 스레드를 선택하려면?

왜 그런가요?

필자는 첫 번째 배열 항목 만 가져오고, 확실하지는 않지만 잘못 본 것이 있습니까? 내가 뭘하려고 오전

은 다음과 같습니다

내가 가진 탭.

탭은 가장 인기있는 스레드를 표시합니다. 이렇게하려면 탭을 클릭하면 오른쪽 게시물로 전환됩니다.

<div class="container row"> 
    <h2>Top 10 Stories</h2> 
    <div id="story-tab"> 
     <ul> 
      <?php 
      $test = $pdo->prepare("SELECT * FROM mybb_threads ORDER BY replies DESC LIMIT 10"); 
      $test->execute(); 

     // while ($row = $test->fetch(PDO::FETCH_ASSOC)) 
      //{ 
       //echo'<li><a href="#st-'.$row['tid'].'-'.$row['fid'].'">'. $row['subject'].'</a></li>'; 
       echo'<li><a href="#st-1-1">1</a></li>'; 
       echo'<li><a href="#st-2-1">2</a></li>'; 
      //} 
      $get = $pdo->prepare("SELECT * FROM mybb_threads ORDER BY replies DESC LIMIT 10"); 
      $get->execute();      
      $array = $get->fetchAll(PDO::FETCH_COLUMN, 0); 

      ?> 
     </ul> 
     <?php 
      $test = $pdo->prepare("SELECT * FROM mybb_threads ORDER BY replies DESC"); 
      $test->execute(); 

      $fetch = $test->fetch(PDO::FETCH_ASSOC); 

      $new = $pdo->prepare("SELECT * FROM mybb_posts WHERE replyto = 0 AND tid IN (:ids) LIMIT 10"); 
      $new->execute(array(":ids" => implode(",", $array))); 

      while ($row = $new->fetch(PDO::FETCH_ASSOC)) 
      { 
       echo '<br /><br /><br /><br />'. $row['tid'].','.$row['fid']; 
      } 
     ?> 
    </div> 
    <br class="clear"> 
    <h2>Top 10 Popular Threads</h2> 
    <div id="thread-tab"> 

    </div> 
</div> 

아이디어가 있으십니까? 바로 여기 http://php.net/manual/en/pdostatement.execute.php예 # 5에서

답변

0

는 int 배열을 사용하여 IN 절과 함께 문을 준비하는 방법을 보여줍니다. 귀하의 경우, 그것은 ...

$params = array(1, 21, 63, 171); 
/* Create a string for the parameter placeholders filled to the number of params */ 
$place_holders = implode(',', array_fill(0, count($params), '?')); 

$sth = $dbh->prepare("SELECT * FROM mybb_posts WHERE replyto = 0 AND tid IN ($place_holders) LIMIT 10"); 
$sth->execute($params); // fills the placeholder ?'s with the values of your array 

희망이 도움이됩니다. 대신

0

..

$new->execute(array(":ids" => implode(",", $array))); 

당신은

$ins= implode(',', array_fill(0, count($array), '?')); 

다음

$new->prepare("SELECT * FROM mybb_posts WHERE replyto =0 AND tid IN ($ins) LIMIT 10"); 
$new->execute($ins); 
시도 할 수
관련 문제