Php 从表中获取所有特定结果,并将其存储到数组中
你好,我不确定是否已经有人问过了,但我已经在谷歌上搜索了20分钟,找不到相关的答案 我正在尝试获取表中的所有线程id,然后将它们存储到名为$ids[]的数组中 然后进行查询:Php 从表中获取所有特定结果,并将其存储到数组中,php,mysql,Php,Mysql,你好,我不确定是否已经有人问过了,但我已经在谷歌上搜索了20分钟,找不到相关的答案 我正在尝试获取表中的所有线程id,然后将它们存储到名为$ids[]的数组中 然后进行查询: SELECT * FROM posts WHERE tid = $ids[] 基本上,我想获取所有的帖子,它们的tid列就是数组中的一个 我该怎么做 顺便说一下,我正在使用PDO 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检
SELECT * FROM posts WHERE tid = $ids[]
基本上,我想获取所有的帖子,它们的tid列就是数组中的一个
我该怎么做
顺便说一下,我正在使用PDO
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在C:\xampp\htdocs\bronified\index.php:77堆栈跟踪:0 C:\xampp\htdocs\bronified\index.php77:PDOStatement->executeArray 1{main}在C:\xampp\htdocs\bronified\index.php第77行中抛出的接近2,3,4,1'的语法
<?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>
';
}
?>
在爆炸和内爆中使用
$idsStr = implode(',', $tids);
$sql = "SELECT * FROM posts WHERE tid IN ($idsStr)";
编辑:假设您知道这些ID是INT,并且没有在其中使用任何其他准备好的语句功能,那么这种方法比将其设置为准备好的语句更容易。如果你真的想做一个事先准备好的陈述,那么:
$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
内爆将PHP数组转换为包含由逗号分隔的ID的字符串。
您只需执行查询。fetch\u array-返回一个数组,该数组对应于使用MYSQLI\u获取的行键->值
$row = $result->fetch_array(MYSQLI_BOTH);
$ids = implode(',',$row['id']);
$sql = "SELECT * FROM posts WHERE tid IN ($ids)"
阵列从哪里来?Mysql还是PHP脚本?在你的新代码中,$array是未定义的。很抱歉,现在添加了完整的代码。如何将所有结果插入数组?重新阅读后,听起来你只需要学习如何进行连接-如果你想选择所有具有线程id的帖子,只需对线程进行内部连接即可。你有没有没有没有线程id的帖子?我需要的是,我正在构建一个线程id数组,然后发送一个查询来选择数组中包含任何线程id的所有帖子。请检查我的编辑,包括错误和代码。听起来您可能没有意识到数组是在构建记录集时创建的。您仍然有$array未定义,代码太多,需要使用联接。我出去了。
$row = $result->fetch_array(MYSQLI_BOTH);
$ids = implode(',',$row['id']);
$sql = "SELECT * FROM posts WHERE tid IN ($ids)"