2013-06-14 2 views
0

У меня массив выглядит следующим образом: (1, 4, 2, 3). Я хочу, чтобы выбрать все темы, которые содержат столбец TID, одно из этих чисел в массиве:Выделить все элементы, которые находятся в массиве из 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))); 

Но, выбирающий только один элемент из базы данных, в то время как у меня есть более чем один результат?

Почему это так?

Я думаю, что он извлекает только первый элемент массива, я не уверен, но вы видите что-то не так?

То, что я пытаюсь сделать, это:

У меня есть вкладки.

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

<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> 

Любые идеи?

ответ

0

Прямо здесь http://php.net/manual/en/pdostatement.execute.phpПример # 5 показывает, как подготовить заявление с пунктом 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); 
Смежные вопросы