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;
}
}
希望这能解决您的问题。
我正在尝试使用从另一个 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;
}
}
希望这能解决您的问题。