在PHP中使用fetchAll返回多个数组
我正在尝试从数据库中检索多行。我遇到的问题是,每次使用此函数时,它都会替换我已尝试返回的所有其他行,并且只返回最后一行。如果有人知道更好的方法,或者知道如何真正做到这一点,请发表评论 新的张贴在这里,所以道歉,如果这是不正确的,在某些方面。谢谢 我的代码:在PHP中使用fetchAll返回多个数组,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试从数据库中检索多行。我遇到的问题是,每次使用此函数时,它都会替换我已尝试返回的所有其他行,并且只返回最后一行。如果有人知道更好的方法,或者知道如何真正做到这一点,请发表评论 新的张贴在这里,所以道歉,如果这是不正确的,在某些方面。谢谢 我的代码: public function getPosts($id){ global $pdo; $query = $pdo->prepare("SELECT * FROM friends WHERE f1 =
public function getPosts($id){
global $pdo;
$query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
$query->bindValue(1, $id);
$query->bindValue(2, $id);
$query->execute();
$res = $query->fetchAll();
foreach($res as $user):
if($user['f1'] == $id):
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f2']);
$query->execute();
else:
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f1']);
$query->execute();
endif;
return $query->fetchAll(); //Trying to return arrays.
endforeach;
}
试试这样的。我不知道f1和f2是什么,所以我只是添加了它们作为占位符。我这里不使用bindValue。只使用
数组($f1\u id,$f2\u id)
我建议将“posts”查询的结果添加到每个用户的“$res”数组中。然后返回“$res”数组,而不是仅返回特定用户的当前帖子 未测试代码:
public function getPosts($id){
global $pdo;
$query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
$query->bindValue(1, $id);
$query->bindValue(2, $id);
$query->execute();
$res = $query->fetchAll();
foreach($res as &$user): // make a reference so i can modify it
if($user['f1'] == $id):
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f2']);
$query->execute();
else:
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f1']);
$query->execute();
endif;
$user['posts'] = $query->fetchAll(); // save the current users posts.
endforeach;
return $res; // all users and their posts.
}
我先前删除的关于剥离while循环的评论有点不完整和无用。所以我发布了一些代码。谢谢,非常感谢我所寻找的D@ivarpois
public function getPosts($id){
global $pdo;
$query = $pdo->prepare("SELECT * FROM friends WHERE f1 = ? OR f2 = ?");
$query->bindValue(1, $id);
$query->bindValue(2, $id);
$query->execute();
$res = $query->fetchAll();
foreach($res as &$user): // make a reference so i can modify it
if($user['f1'] == $id):
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f2']);
$query->execute();
else:
$query = $pdo->prepare("SELECT * FROM posts JOIN users ON posts.user_id = users.id WHERE user_id = ?");
$query->bindValue(1, $user['f1']);
$query->execute();
endif;
$user['posts'] = $query->fetchAll(); // save the current users posts.
endforeach;
return $res; // all users and their posts.
}