我目前正在创建一个接受用户ID的函数,并且根据该id,它应该返回包含用户ID的posts数据库中的所有值。我有一个单独的php文件,我保存了该函数,因为我想在很多页面上使用它。在functions.php文件中,我有:
class getposts
{
public function getpostcontent($userid){
include('db-conx.php');//Connects to Db
$getval = "SELECT `content`,`date` FROM posts WHERE userid = ?";
$stmt = $conn->stmt_init();
if ($stmt->prepare($getval))
{
$userid = $_SESSION['userid'];
$stmt->bind_param("s", $userid);
$stmt->execute();
$stmt->bind_result($content, $date);
while ($stmt->fetch()) {
$displayname = "Tom";
$array = [
"content" => "$content",
"date" => "$date",
"displayname" => "$displayname",
];
return $array;
}
}
}
并在Posts.php中使用它来调用它:
$posts = new getposts();
echo $posts ->getpostcontent($userid);
问题是用户在posts数据库中有多行,代码只运行一次。我如何循环它以在调用它时显示每行的值?我可能会过度思考并四处寻找,但似乎无法让它发挥作用。
答案 0 :(得分:1)
每次迭代都可以在数组中插入一条新记录 - 然后返回整个数组:
while ($stmt->fetch()) {
$displayname = "Tom";
$array[] = array(
"content" => "$content",
"date" => "$date",
"displayname" => "$displayname"
);
}
return $array;
在您的代码中,每次都会重写数组,只返回数据库的最后一行。现在它将简单地添加到while循环内的数组中,然后在完成后将其全部返回。
编辑:我通常使用$result
从数据库中取回数据 - 不确定您的方法是否有效 - 但是如果它没有考虑到:)
编辑2:
在代码中,您现在拥有一个数组数组。您可以像这样调出每个元素:
echo $array[0]['content'];
这将从第一条记录中回显content
的内容,$array[1]['content']
包含数据库的第二行,依此类推。
编辑3:
你正在返回一个数组 - 而不是一个对象,所以你可以这样做:
$posts = new getposts();
// You make an object of the class.
$returned=$posts->getpostcontent($userid);
// Now you run the query against the userID and return the array into $returned
foeach($returned as $val)
{
print_r($val);
// This is showing you the structure of each array inside the main array.
// Or you can access each bit as needed:
echo 'The date is '.$val['date'].'<br>';
echo 'The content is is '.$val['content'].'<br>';
}