PHP、Mysqli、SQL查询以获取值并显示其他值

PHP、Mysqli、SQL查询以获取值并显示其他值,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我试图做一些相当复杂的事情,但我希望它在文本中有意义 因此,我在一个页面上有一个链接,将我带到post.php?postid=3 在我的数据库中有一个名为camp\u id的整数字段。例如,当我在一个具有值为1的字段camp_id的帖子上时,我希望显示表中该字段中值为1的所有内容 如果我将URL更改为post.php?postid=2,并且该帖子的camp\u id为4,我将显示camp\u id为4的所有内容的列表 无论如何,下面是我的代码,下面是当前的错误 以下是我的功能: public f

我试图做一些相当复杂的事情,但我希望它在文本中有意义

因此,我在一个页面上有一个链接,将我带到
post.php?postid=3

在我的数据库中有一个名为
camp\u id
的整数字段。例如,当我在一个具有值为1的字段camp_id的帖子上时,我希望显示表中该字段中值为1的所有内容

如果我将URL更改为
post.php?postid=2
,并且该帖子的
camp\u id
为4,我将显示camp\u id为4的所有内容的列表

无论如何,下面是我的代码,下面是当前的错误

以下是我的功能:

public function getartfromcamp($campid)
{
    $con = $this->db->OpenCon();
    $campid = $con->real_escape_string($campid);

    $stmt = "SELECT * from post WHERE camp_id = '$campid'";

    $relatedlinks = $con->query($stmt);

    if ($relatedlinks->num_rows > 1) {
        $sql = $relatedlinks;
    } else {
        $sql = "No article";
        echo "";

    }

    $this->db->CloseCon();

    return $sql;
}
以下是页面上的代码:

include 'postclass.php';

$postid = $_GET['postid'];

$article = new Post();
$relatedlinks  = $article->getartfromcamp($postid);


?>
<div class='row'>
<?php
while ($row = $relatedlinks->fetch_assoc()) {
  ?>
<ul>
<ul>
<li><a href="postview.php?postid=<?php echo $row['article_id'];?>"><?php echo $row['article_name'];?></a></li>
</ul>

在函数
getartfromcamp
中,当没有结果时,返回的是
$sql
字符串,而不是连接对象

在这种特殊情况下,不会出现任何结果,因此将返回字符串。因此,当您试图对字符串运行
fetch\u assoc
时,它会抛出错误。您应该让函数只返回连接对象,即使没有返回任何行

改为:

public function getartfromcamp($campid)
{
    $con = $this->db->OpenCon();
    $campid = $con->real_escape_string($campid);

    $stmt = "SELECT * from post WHERE camp_id = '$campid'";

    $relatedlinks = $con->query($stmt);

    $this->db->CloseCon();

    return $relatedlinks;
}

旁注:

在函数getartfromcamp中,当没有结果时,返回的是$sql字符串,而不是db link。在这种特殊情况下,不会出现任何结果,因此将返回字符串。因此,当您试图在字符串上运行fetch_assoc时,它抛出了一个错误警告:当使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用手动转义和字符串插值或串联来完成此操作,因为这样会创建严重的错误。意外未扫描的数据是一个严重的风险。使用绑定参数不太冗长,更容易检查是否正确执行。
public function getartfromcamp($campid)
{
    $con = $this->db->OpenCon();
    $campid = $con->real_escape_string($campid);

    $stmt = "SELECT * from post WHERE camp_id = '$campid'";

    $relatedlinks = $con->query($stmt);

    $this->db->CloseCon();

    return $relatedlinks;
}