您好,我不确定是否已经被问过,但我现在已经在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>
';
}
?>
答案 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)"