php - 为什么这个 get 函数会出现致命错误?
问题描述
我正在尝试根据 3 个要求选择我的帖子表中的所有行。
- 帖子表中的用户 ID = 用户表中的用户 ID
- Posts 表中的 hostid = users 表中的 userid
- 帖子表中的评论 ID = 零
我想选择所有满足这些要求的行。这是错误...
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool in C:\xampp\htdocs\loginsystem\includes\posts.inc.php:108 Stack trace: #0 C:\xampp\htdocs\loginsystem\home.php(38): getUploads(Object(mysqli)) #1 {main} thrown in C:\xampp\htdocs\loginsystem\includes\posts.inc.php on line 108
这是我的代码...
function getUploads($conn) {
$userName = $_GET["user"];
$sqluserid = "SELECT userid FROM users WHERE userName = $userName";
$userid = mysqli_query($conn, $sqluserid);
$sqlusercontent = "SELECT * FROM posts WHERE hostid = $userid AND userid = $userid AND commentid = 0";
$usercontent = mysqli_query($conn, $sqlusercontent);
$postid = 1;
// This is the actual upload content
while ($row = $usercontent->fetch_assoc()) {
echo "<div class='postbox'><p>";
echo $row['title']."<br>";
echo $row['date']."<br>";
echo "<div><img src='posts/".$userid."/".$postid.".*></div>";
echo $row['description']."<br>";
echo "</p>";
echo "</div>";
$postid++;
}
}
解决方案
您没有调用$userid->fetch_assoc()
获取第一个查询的结果。您需要执行此操作,然后使用$row['userid']
将用户标识移出行。
您还需要在第一个查询中为用户名加上引号。最好使用准备好的语句 and$stmt->bind_param()
来防止 SQL 注入。
但是首先不需要两个查询,您可以将两个表连接起来。
SELECT p.*
FROM posts AS p
JOIN users AS u ON p.userid = u.userid AND p.hostid = u.userid
WHERE u.username = '$userName' AND p.commentid = 0
您应该检查查询的结果,然后您会在第一个查询中收到语法错误通知。
$result = mysqli_query($conn, $sql) or die($conn->error);
推荐阅读
- jenkins-pipeline - 非主分支未在 Jenkins 中构建
- python-3.x - 如何授予对已安装 GitHub 应用程序的存储库访问权限
- hadoop - 在 HDP 2.6.5 上安装拼接机
- android - 是否可以在 JNI 中使用与 java 完全相同的 java hashmap
- oracle - 我在创建 TRIGGER 时犯了什么错误?
- java - Java Monitors:块代码段或代码段使用的块资源?
- angular - 我想在函数执行时在地图上添加图层
- django - 由于 requirements.txt 错误,无法在 Heroku 中部署 Django 应用
- nms - .Net 中的 AMQ - 证书或凭据
- for-loop - 为什么 for 循环的初始化器用方括号括起来?