select 来自 mysql table 使用数组

select from mysql table using array

我正在尝试使用从另一个 table 获得的 ID 数组显示我的数据库 table 中的行。我希望它显示第一行,即 $rowsfriend。并显示第二行,即 rows .......... 但它只显示 $rowsfriend

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ochat";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM friends where friend1='".($_POST[id])."'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

     while($row = $result->fetch_assoc()) {

     $rowsfriend = $row["friend2"];
         echo $rows;
         }
     }
$sqll = "SELECT * FROM users WHERE id IN ($rowssfriend)";
$resultt = $conn->query($sqll);
if ($resultt->num_rows > 0) {

     while($roww = $resultt->fetch_assoc()) {

     $rowsss = $row["username"];
         echo $rowss;
         }
     }
 else {
?>
    <h1>Register</h1> 
    <form action="selectfriends.php" method="post"> 
        id:<br /> 
        <input type="text" name="id" value="" /> 
        <br /><br /> 

        <input type="submit" value="enter" /> 
    </form>
    <?php
}

?>

第二个循环有错别字

您将值分配给 $rowsss 并尝试从 $rowss 回显注意差异。 此外,您将 fetch_assoc 结果分配给 $roww,然后尝试使用 $row 再次调用它。

$sqll = "SELECT * FROM users WHERE id IN ($rowsfriend)";
$resultt = $conn->query($sqll);
if ($resultt->num_rows > 0) {

     while($roww = $resultt->fetch_assoc()) {

         $rowsss = $roww["username"];
         echo $rowsss;
         }
     }

改进点是:检查你的变量名,起一个容易理解,不易混淆的名字。 例如,包含 sql 查询的变量不应命名为 $sql,更糟糕的是,第二个查询不应命名为 sqll。而是使用暗示你在做什么的名字。

$querySelectFriendsFrom = "SELECT * FROM users WHERE id IN ($friendId)";

不要将此视为硬性规定,它更像是一个防止愚蠢错误的提示。

更新:查询中还有一个类型引用 rowssfriend 而不是 rowsfriend。固定在上面。

如果可能,请尝试使用此版本的代码:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "ochat";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT users.* FROM users WHERE users.id IN (SELECT friend2 FROM friends where friend1='".($_POST[id])."')";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $rows = $row["username"];
        echo $rows;
    }
}
else {
?>
    <h1>Register</h1> 
    <form action="selectfriends.php" method="post"> 
        id:<br /> 
        <input type="text" name="id" value="" /> 
        <br /><br /> 

        <input type="submit" value="enter" /> 
    </form>
    <?php
}
?>

就我对代码的理解而言,问题出在@Admieus 所写的变量名拼写错误,而且事实上在第一个循环变量的每次迭代中 $rowsfriend 都被一个新的变量覆盖了因此在循环结束后,$rowsfriend 包含第一个查询 $sql 结果中的最后一个 ID。 上面的版本只使用其中的子查询进行一次查询,以直接获取 $_POST[$id].

中给出的 friend1 好友的用户名

希望对您有所帮助。

您可以编写此嵌套查询来代替两个查询。

$sqll = "SELECT * FROM USERS WHERE ID IN (SELECT friend2 FROM friends WHERE friend1='".$_POST[$id]."')";
$resultt = $conn->query($sqll);
if ($resultt->num_rows > 0)
 {
   while($roww = $resultt->fetch_assoc()) 
     {
       $rowsss = $row["username"];
       echo $rowss;
     }
  }

希望这能解决您的问题。