0

(1, 4, 2, 3) のような配列があります。配列内の次の数値のいずれかである列 tid を含むすべてのスレッドを選択したい:

$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)));

しかし、複数の結果があるのに、データベースから 1 つのアイテムしかフェッチしないのですか?

なぜそれをしているのですか?

最初の配列項目のみを取得していると思いますが、よくわかりませんが、何か問題がありますか?

私がやろうとしていることは次のとおりです。

タブがあります。

タブには、最も人気のあるスレッドが返信別に表示されます。そうしたいのですが、タブをクリックすると、正しい投稿に切り替わります。

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

何か案は?

4

2 に答える 2

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);
于 2013-06-14T15:42:16.773 に答える
0

ここでhttp://php.net/manual/en/pdostatement.execute.php 例 #5は、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

お役に立てれば。

于 2013-06-14T15:34:31.327 に答える