从表中获取所有特定结果,并将它们存储到数组中

时间:2013-06-13 20:16:06

标签: php mysql

您好,我不确定是否已经被问过,但我现在已经在Google上搜索了20分钟,找不到相关的答案。

我试图在我的表中获取所有thread_id,然后将它们存储到名为$ ids []

的数组中

然后进行查询:

SELECT * FROM posts WHERE tid = $ids[]

基本上,我想获取所有帖子,他们的tid列是数组中的其中一个。

我该怎么做?

我正在使用PDO。

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在C:\ xampp \ htdocs \ bronified \ index中的第1行''2,3,4,1'ORDER BY pid ASC LIMIT 10'附近使用正确的语法。 php:77堆栈跟踪:#0 C:\ xampp \ htdocs \ bronified \ index.php(77):PDOStatement->执行(数组)#1 {main}在C:\ xampp \ htdocs \ bronified \ index中抛出。第77行的PHP

                <?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>';
                }   
                $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 ORDER BY pid ASC LIMIT 10");
                $new->execute(array(":ids" => implode(" , ",$array)));

                while ($row = $new->fetch(PDO::FETCH_ASSOC))
                {
                    echo 
                    '
                        <div id="st-'.$row['tid'].'-'.$row['fid'].'">
                            <h4>'.$row['subject'].'</h4>
                            <p>
                                '.$row['message'].'
                            </p>
                        </div>
                    ';
                }
            ?>

3 个答案:

答案 0 :(得分:0)

使用IN和implode

$idsStr = implode(',', $tids);
$sql = "SELECT * FROM posts WHERE tid IN ($idsStr)";

编辑:假设您知道这些ID是整数,并且您没有在其中使用任何其他预准备语句功能,这种方式比使其成为预准备语句更容易。如果你真的想把它作为准备好的陈述,那么:

$idsStr = "";
foreach($tids AS $id){
    $idsStr .= "?, ";
}
$idsStr = trim($idsStr, ', ');
$sql = "SELECT * FROM posts WHERE tid IN ($idsStr)";
$sth = $dbh->prepare($sql);
foreach($tids AS $k=>$id){
    $sth->bindParam($k, $id, PDO::PARAM_INT);
}

Edit2:听起来你只需要加入。你说你想从表中选择所有线程ID:

SELECT * FROM posts INNER JOIN threads ON threads.thread_id = posts.thread_id

答案 1 :(得分:0)

$query = "SELECT * FROM posts WHERE tid IN ".implode(" , ",$ids);

implodes将您的PHP数组转换为包含以逗号分隔的ID的字符串。 您只需执行查询即可。

答案 2 :(得分:0)

fetch_array - 返回与获取的行Key-&gt; Value with MYSQLI_BOTH

对应的数组
$row = $result->fetch_array(MYSQLI_BOTH);
$ids = implode(',',$row['id']);
$sql = "SELECT * FROM posts WHERE tid IN ($ids)"
相关问题