【问题标题】:PHP / MYSQLI: Read row before while loopPHP / MYSQLI:在while循环之前读取行
【发布时间】:2017-12-17 04:50:48
【问题描述】:

我有以下代码:

<html> //This is using bootstrap, but nevermind, has nothing todo with question...
<body>
  <?php
      echo "<div class=\"list-group\">".PHP_EOL;
      $connection = mysqli_connect('...');
      if(mysqli_connect_errno()) {
          die('Connection Error');
      }
      $connection->set_charset("utf8"); //$bid is a var declared before
      $getcom = $connection->query("SELECT * FROM hilde_comments WHERE Refer_ID LIKE '$bid' ORDER BY Comment_ID DESC LIMIT 10");
      if ($getcom->num_rows > 0) {
          while ($row = $getcom->fetch_array(MYSQLI_ASSOC)) {
              $getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '$row["Account_adress"]'");
              if ($getacc->num_rows > 0) {
                  $accinf = $getacc->fetch_array(MYSQLI_ASSOC);
                  echo "<div class=\"list-group-item\">".PHP_EOL;
                  echo "<h4 class=\"list-group-item-heading\"><a href='".$accinf["link"]."' alt=\"Click here!\">".$accinf["email"]."</a></h4>".PHP_EOL;
                  echo "<p class=\"list-group-item-text\">".$row["Comment"]."</p></div>".PHP_EOL;
              } else {
                  echo "Information ".$row["Account_UID"]." failed.";
              }

          }
          $getcom->close();
          $getacc->close();
          $connection->close();
          echo "</div>";
      } else {
          $getcom->close();
          $connection->close();
          echo("<div class=\"list-group-item list-group-item-danger\">Text not found</div>");
      }
  ?>
</body>
</html>

当然,这行不通(正如有人在我的previous question 中指出的那样)。但是为了继续,我需要两个查询的结果来回显,正如您在我的示例 sn-p 中看到的那样。如何存储第一个查询的结果并在我的 while 循环中实际将它们用作 ASSOC?

先谢谢各位了,

VicStudio

【问题讨论】:

  • 不是$row变量中的第一个查询结果吗?
  • @ClémentMalet 是的,但是当第一个查询仍然处于活动状态(并且尚未关闭)时,我无法启动第二个查询
  • 你能发布你的真实代码吗?我猜您在第二个查询中使用 $row 并覆盖了第一个提取。您也可以通过 1 个查询和 join 来完成所有这些操作。
  • 打开第二个连接?
  • @chris85 现在是真正的 sn-p...

标签: php mysqli store associative-array


【解决方案1】:

没有理由不能使用多个查询。您无需在执行另一个查询之前完成处理一个查询。

$getcom = $connection->query("...");
while ($row = $getcom->fetch_array(MYSQLI_ASSOC)) {
    $getacc = $connection->query("...");
    while ($row2 = $getacc->fetch_array(MYSQLI_ASSOC)) {
        echo $row2["Name"]." and ".$row["Adress"];
    }
}

编辑现在已经添加了真实的代码,可以看出问题出在这里:

$getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '$row["Account_adress"]'");

你在混用引号。您可能在该查询上遇到 mysqli 错误(或 PHP 的语法错误)。您应该真的为此使用参数化查询,但如果您以这种方式使用变量,请中断您的字符串:

$getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '" . $row["Account_adress"] . "'");

只要地址中没有',这将起作用。请记住,这种代码是等待发生的 SQL 注入攻击,请切换到使用参数化查询。

【讨论】:

  • 什么是参数化查询?
  • 谢谢!你帮了很多忙,不仅在我的问题上,而且在我的网页安全系统上! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2019-09-03
  • 2012-06-01
相关资源
最近更新 更多