如何解决mysqli_fetch_assoc错误?

时间:2019-07-18 06:47:34

标签: php css mysqli

我正在为我的网站创建一个好友列表,用户可以在其中关注,阻止,取消关注和取消阻止其他用户。我的朋友表有3列。较低的用户ID的列,其他用户的列以及将显示其关系的状态列。

user1 | user2 | status
----------------------
1       2       1
1       3       2
2       3       3

我已经创建了一个测试页面来显示登录用户的关系,并根据其状态将其分为几组。以下代码应该显示所有被选中且状态为1的用户。

if (isset($_SESSION['userID'])) {
                $userID = $_SESSION['userID'];
                $friendsql = "SELECT * FROM friends WHERE user1 = ? OR user2 = ?";
                $friendstmt = mysqli_stmt_init($conn);
                if (!mysqli_stmt_prepare($friendstmt, $friendsql)) {
                    echo "error";
                }
                else {
                    mysqli_stmt_bind_param($friendstmt, "ii", $userID, $userID);
                    mysqli_stmt_execute($friendstmt);
                    $friendresult = mysqli_stmt_get_result($friendstmt);
                    echo "<div class='friendStatus1'>";
                        echo "Following";
                        while (($friendrow = mysqli_fetch_assoc($friendresult)) && ($friendrow['status'] == 1)) {
                            if ($userID == $friendrow['user1']) {
                                $otheruserID = $friendrow['user2'];
                            }
                            else {
                                $otheruserID = $friendrow['user1'];
                            }
                            $otheruserNamesql = "SELECT userName FROM users WHERE userid = ?";
                            $otheruserNamestmt = mysqli_stmt_init($conn);
                            if (!mysqli_stmt_prepare($otheruserNamestmt, $otheruserNamesql)) {
                                echo "error";
                            }
                            else {
                                mysqli_stmt_bind_param($otheruserNamestmt, "s", $otheruserID);
                                mysqli_stmt_execute($otheruserNamestmt);
                                $otheruserNameresult = mysqli_stmt_get_result($otheruserNamestmt);
                                while ($otheruserNamerow = mysqli_fetch_assoc($otheruserNameresult)) {
                                    echo "<div class='friendBox'>";
                                        echo $otheruserNamerow['userName'];
                                    echo "</div>";
                                }
                            }
                         } 
                    echo "</div>";

当前,我的friends表中有两个与登录用户的状态为= 1的关系,但是我的代码将仅显示第一个关系。我的while循环有一个错误,它只允许第一个关系吐出。有人可以帮我解决我的错误吗?

我的CSS

.friendListContainer {
        position: relative;
        margin: 60px 0px 37px 0px;
        width: 100%;
        min-height: calc(100vh - 97px);
        max-height: 100%;
        background-color: #777;
        text-align: center;
        vertical-align: top;
    }
    .friendBox {
        width: 70%;
        height: auto;
        background-color: #555;
        vertical-align: top;
        padding: 5px;
        text-align: center;
        margin: 10px auto;
    }
    .friendStatus1 {
        width: 10%;
        min-height: calc(100vh - 97px);
        max-height: 100%;
        background-color: #666; 
        display: inline-block;
        border-left: 1px solid #444;
        border-right: 1px solid #444;
        vertical-align: top;
    }

1 个答案:

答案 0 :(得分:2)

您的外部while循环是

while (($friendrow = mysqli_fetch_assoc($friendresult)) && ($friendrow['status'] == 1)) {

因此,如果遇到$friendrow['status'] == 0所在的行,它将停止循环并忽略其余行(因为它们未排序)。

最好将它作为SQL条件的一部分-如果只希望将这些行添加到SQL中...

SELECT * FROM friends WHERE (user1 = ? OR user2 = ?) and status = 1

(请注意方括号,以确保对运算符进行正确分组)。