php - 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,因此任何对此的见解将不胜感激。
解决方案
错误另有说明,但说“未定义索引”的事实意味着试图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 注入。
推荐阅读
- r - 在循环内部而不是外部运行时出现无效时间争论错误
- python - Python TFLearn 无法保存到单个 model.tfl 文件
- vue.js - 下拉选择后Vue启用文本字段
- uiviewcontroller - 使用 UIHostingController 的 UIScrollView 跳跃视图
- python - 为什么我的运行部分显示“AttributeError:'numpy.ndarray'对象没有属性'load'”,即使我没有写“load”?
- reactjs - 为什么我的页面加载超过 1.5 秒,而 next.js 中使用棱镜的数据很少?
- r - Find the ratio between each column entry and the following entry, for every column, for a list of data.frames in R
- c - C套接字下载功能传输损坏的文件
- vba - 未应用条件格式
- jquery - 无法使用 ajax 请求序列化 asp dot net core 表单