PHP SQL While循环不工作
我有一个代码,它应该从PHP SQL While循环不工作,php,mysql,sql,Php,Mysql,Sql,我有一个代码,它应该从收藏夹中获取用户的所有收藏夹,然后它应该使用该信息从菜单中获取信息,将它们显示为图片 它所要做的就是显示用户最喜欢的图片,但目前它只会显示一张图片,而他们最喜欢的图片有很多 <?php $con=mysqli_connect("localhost","UN","PW","DB"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mys
收藏夹
中获取用户的所有收藏夹,然后它应该使用该信息从菜单
中获取信息,将它们显示为图片
它所要做的就是显示用户最喜欢的图片,但目前它只会显示一张图片,而他们最喜欢的图片有很多
<?php
$con=mysqli_connect("localhost","UN","PW","DB");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id=$_SESSION['user']['id'];
$result = mysqli_query($con,"SELECT * FROM favourites WHERE user='$id'");
while($row = mysqli_fetch_array($result)) {
$code=$row['gamecode'];
$con=mysqli_connect("localhost","UN","PW","DB");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM menus WHERE code='$code'");
while($row = mysqli_fetch_array($result)) {
?>
<a href="<?php echo $row['link']; ?>">
<img src="<?php echo $row['picture']; ?>" alt="<?php echo $row['game']; ?>" height="120" width="150" class="fade"></a>
<?php
}
mysqli_close($con);
}
mysqli_close($con);
?>
通过重新连接到循环中的数据库,您正在终止查询
$con = mysqli_connect(...) // connection #1
$result = mysqli_query(...);
while($row = mysqli_fetch($result)) {
$con = mysqli_connect(...); // connection #2
再次连接时,会终止原始连接,从而终止查询
除非您需要使用不同的凭据连接两次,否则不需要第二次连接。一个连接可以处理多个查询
顺便说一句,如果您使用了不同的连接句柄变量,例如
$con = mysqli_connect(...);
$othercon = mysqli_connect(...);
你就不会有这个问题了。您可以有多个连接,但不能使用同一个变量。请查看它是否可以使用不同的结果变量,而只能使用一个DB连接
<?php
$con=mysqli_connect("localhost","UN","PW","DB");
// Check connection
if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
$id = $_SESSION['user']['id'];
$result1 = mysqli_query($con,"SELECT * FROM favourites WHERE user='$id'");
while($row = mysqli_fetch_array($result1)) {
$result2 = mysqli_query($con,"SELECT * FROM menus WHERE code='".$row['gamecode']."");
while($row2 = mysqli_fetch_array($result2)) { ?>
<a href="<?php echo $row2['link']; ?>">
<img src="<?php echo $row2['picture']; ?>" alt="<?php echo $row2['game']; ?>" height="120" width="150" class="fade"></a>
<?php }
}
mysqli_close($con);
?>
您有两个MySQL连接,它们具有相同的变量名$con
,以及$result
和$row
。所以我只需更改内部循环中的变量名,这样它们就不会冲突&所有这些都应该可以工作<代码>$con\u inside
,$result\u inside
和$row\u inside
我还添加了或die(mysqli_error())
到您的mysqli\u查询
行,以便在查询终止时返回错误
<?php
$con = mysqli_connect("localhost","UN","PW","DB");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id = $_SESSION['user']['id'];
$result = mysqli_query($con, "SELECT * FROM favourites WHERE user='$id'") or die(mysqli_error());
while ($row = mysqli_fetch_array($result)) {
$code = $row['gamecode'];
$con_inside = mysqli_connect("localhost","UN","PW","DB");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result_inside = mysqli_query($con_inside, "SELECT * FROM menus WHERE code='$code'") or die(mysqli_error());
while($row_inside = mysqli_fetch_array($result_inside)) {
?>
<a href="<?php echo $row_inside['link']; ?>">
<img src="<?php echo $row_inside['picture']; ?>" alt="<?php echo $row_inside['game']; ?>" height="120" width="150" class="fade"></a>
<?php
}
mysqli_close($con_inside);
}
mysqli_close($con);
为什么要在循环中多次连接到数据库?它们是两个不同的数据库。那么为什么要使用相同的变量?有两个数据库包含我试图获取的数据。这就是为什么有两个连接仍然没有必要。您可以非常轻松地执行
select db.table.field
。只需授予一个用户帐户对两个数据库的访问权限。那么,您必须为第二个连接使用其他变量名,您不能重复使用result
和row
@Bob是的,有两个连接。那很好。您只需要重命名连接句柄。请尝试我在回答中为您重新编写的代码。谢谢您的回答,但我刚刚尝试过,同样的事情也发生了。@Bob好的,现在再试一次。我还将一些$row
变量更改为$row\u inside
,这样内部连接结果就不会与主连接结果冲突。不幸的是,它仍然是一样的。@Bob现在再试一次。我还将$result
调整为$result\u-inside
。这样更好,非常感谢!
<?php
// Main DB connection.
$con = mysqli_connect("localhost","UN","PW","DB") or die(mysqli_connect_error());
// Inside DB connection.
$con_inside = mysqli_connect("localhost","UN","PW","DB") or die(mysqli_connect_error());
// Set the $id variable.
$id = $_SESSION['user']['id'];
// Set the query string.
$query = "SELECT * FROM favourites WHERE user='$id'";
// Bind the values to the query.
mysqli_stmt_bind_param($query, 's', $id);
// Get the result.
$result = mysqli_query($con, $query) or die(mysqli_error());
// Roll through the results.
while ($row = mysqli_fetch_array($result)) {
// Set the $code variable.
$code = $row['gamecode'];
// Set the query string.
$query_inside = "SELECT * FROM menus WHERE code='$code'";
// Bind the values to the query.
mysqli_stmt_bind_param($query_inside, 's', $code);
// Get the result.
$result_inside = mysqli_query($con_inside, $query_inside) or die(mysqli_error());
// Roll through the results.
while($row_inside = mysqli_fetch_array($result_inside)) {
?>
<a href="<?php echo $row_inside['link']; ?>">
<img src="<?php echo $row_inside['picture']; ?>" alt="<?php echo $row_inside['game']; ?>" height="120" width="150" class="fade"></a>
<?php
}
// Free the result set.
mysqli_free_result($result_inside);
// Close the connection.
mysqli_close($con_inside);
}
// Free the result set.
mysqli_free_result($result);
// Close the connection.
mysqli_close($con);