Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SQL While循环不工作_Php_Mysql_Sql - Fatal编程技术网

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);