即使表中存在值DO,mysql查询返回false?试着找不到表?

时间:2016-06-29 19:11:38

标签: php mysql

好的,所以我在这里建立第一个问题https://stackoverflow.com/questions/38102208/php-mysql-how-to-only-echo-links-with-search-bar-post-that-arent-already-echo

尝试仅回显id不在名为conversation的mysql表中的人的用户名以及set id(登录的人)。

如果在此处发布搜索栏,我会在桌面会话中回复他们的身份证明为user_two的人员。

//$num = mysqli_query($con, "SELECT * FROM `pm_messages` WHERE user_from=".$account['id']."");
$numCon = mysqli_query($con, "SELECT * FROM `conversation` WHERE user_one=".$account['id']."");
$numrows = mysqli_num_rows($numCon);

while ($u = mysqli_fetch_assoc($numCon)) {
    //get other users usernames to echo link
    $getUserTwo = mysqli_query($con, "SELECT * FROM `accounts` WHERE id=".$u['user_two']."");
    $s = mysqli_fetch_assoc($getUserTwo);

    //echo $s['username'];
    echo "<a href='message.php?id={$s['id']}'><li><img class = 'dmCircle' src = '../images/chatCircle.png'/>{$s['username']} </li></a>";
}

这很有效,这意味着只有开始对话的人(此用户存在一行,对话表中有一行)才会在链接中回显。

问题出现在搜索栏中,因为即使对话已经开始,它也会回复所有人,导致重复:

enter image description here

(注意2 khusteds)

这没有意义,因为在这里我选择会话中的行,其中user_one是登录用户,user_two是第二个用户,如果结果为FALSE(仅表示没有会话),则仅回显链接:

if (isset($_POST['searchbarpm'])) {
    //$sess->getUsers();
    $dbh = mysqli_connect("localhost","username","password","sqlserver");
    $query = $_POST['searchbarpm'];
    $q = mysqli_query($dbh, "SELECT * FROM sqlserver.accounts WHERE username LIKE '%".$query."%'");

    //display all the results
    while($row = mysqli_fetch_assoc($q)) {

        $checkConvo = mysql_query("SELECT 'id' FROM sqlserver.conversation WHERE user_one=".$user_id." AND user_two=".$row['id']."");

        //only output users they dont have convo going with because theyre already printed!!!
        if ($checkConvo==false && $row['id']!= $user_id) { 
            echo "<a href='message.php?id={$row['id']}'><li><img class = 'dmCircle' src = '../images/noChatCircle.png'/> {$row['username']}</li></a>";
        }
    }
}

但看起来查询总是错误的,因为所有用户都会被回复。为什么会这样?如何才能仅使用登录用户(user_one)回显不在会话表中的用户? 编辑:

enter image description here  新代码(抱歉截图); :

enter image description here

@IanH -

$con = mysqli_connect("localhost","username","password","sqlserver");

                    //$num = mysqli_query($con, "SELECT * FROM `pm_messages` WHERE user_from=".$account['id']."");
                $numCon = mysqli_query($con, "SELECT * FROM `conversation` WHERE user_one=".$account['id']."");
                    $numrows = mysqli_num_rows($numCon);
                while ($u = mysqli_fetch_assoc($numCon))
                    {
                    //get other users usernames to echo link
    $getUserTwo = mysqli_query($con, "SELECT * FROM `accounts` WHERE id=".$u['user_two']."");
        $s = mysqli_fetch_assoc($getUserTwo);
                    //echo $s['username'];

                    if(isset($_POST['searchbarpm'])){
//$sess->getUsers();
    $dbh = mysqli_connect("localhost","username","password","sqlserver");
                    $query = $_POST['searchbarpm'];
                    $q = mysqli_query($dbh, "SELECT * FROM sqlserver.accounts WHERE username LIKE '%".$query."%'");
                    //display all the results
                    while($row = mysqli_fetch_assoc($q)){


                        if($row['id']!= $user_id && $row['id']!=$s['id']) { //only output users they dont have convo going with because theyre already printed!!!
                        echo "<a href='message.php?id={$row['id']}'><li><img class = 'dmCircle' src = '../images/noChatCircle.png'/> {$row['username']}</li></a>";
                        }
                    }
}
                    else {


                    echo "<a href='message.php?id={$s['id']}'><li><img class = 'dmCircle' src = '../images/chatCircle.png'/>{$s['username']} </li></a>";
                    }
                }//

1 个答案:

答案 0 :(得分:0)

首先,您需要将第二个发布代码块第9行的mysql_query( ... )更改为mysqli_query( ... ),以获得API一致性和兼容性。

此外,如果您在对话表中允许多个条目,您可以输入重复的结果,其中用户A和B可以作为user1 = A输入,user2 = B在一个对话中输入,user1 = B,user2 = A in a不同的谈话。

最后,正如 Jay Blanchard 所说,你应该使用预准备语句来避免SQL注入。