首页 > 解决方案 > PHP函数没有正确执行?

问题描述

我正在构建一个小型 PHP 论坛,允许用户创建帖子并对其发表评论。我有一个特定的功能,应该显示帖子的回复数量,由于某种原因,它只显示零。我也有一个类似的功能来计算视图并且它工作得很好,所以我不确定问题是什么。

以下是回复的功能代码:

  function countReplies($cid, $scid, $tid, $mysqli){
$select = mysqli_query($mysqli, "SELECT category_id, subcategory_id, topic_id FROM replies WHERE ".$cid." = category_id AND
                                ".$scid." = subcategory_id AND ".$tid." = topic_id");
return mysqli_num_rows($select);
}

这就是我所说的:

<div class = "content">

disptopics($_GET['cid'], $_GET['scid'], $mysqli);
countReplies($_GET['cid'], $_GET['scid'], $_GET['tid'], $mysqli);

?>
</div>

我收到以下错误:

注意:未定义的索引:C:\xampp\htdocs(A)Book 2.0\Bootstrap\topics.php 第 56 行中的 tid

警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在 C:\xampp\htdocs(A)Book 2.0\Bootstrap\content_function.php 第 110 行给出

我很确定我定义了变量 tid,因此任何对此的见解将不胜感激。

标签: phpmysqlfunctionforum

解决方案


错误另有说明,但说“未定义索引”的事实意味着试图tid在数组中查找索引,可能$_GET不是变量$tid本身。

发生这种情况时,您会得到一个无效的 SQL 语句,因为您实际上没有向条件传递任何内容,从而导致语法错误:

"SELECT category_id, subcategory_id, topic_id FROM replies 
 WHERE $cid = category_id AND $scid = subcategory_id AND = topic_id"

注意subcategory_id AND = topic_id.

为避免这种情况,您应该始终引用您的参数(这将因为变量插值而起作用):

"SELECT category_id, subcategory_id, topic_id FROM replies 
 WHERE '$cid' = category_id AND '$scid' = subcategory_id AND '$tid' = topic_id"

您仍然会得到错误的结果,但要避免其他级联错误。

但是,您应该在调用函数之前检查所有必需的参数是否存在。而当你在做的时候,你也应该学习如何防止 SQL 注入


推荐阅读