Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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 联系太多;函数中的db connect_Php_Html_Mysqli - Fatal编程技术网

Php 联系太多;函数中的db connect

Php 联系太多;函数中的db connect,php,html,mysqli,Php,Html,Mysqli,我目前正在更新我的PHP知识,在从数据库中获取数据时遇到了一个问题 我自己的问题可能是通过max_连接设置来解决的(是的,我已经搜索过了),但我相信这可能是一个解决办法,因为如果不需要的话,我不想更改基本设置 我的小“梯子”上有三个“台阶”; 我的主要是一个梯子,每个梯子有一个(或多个)台阶,每个台阶有一个(或多个)模块 所以我要做的是一个函数,它检索所有这些并显示它们。现在,每个函数都连接到我的数据库;函数运行其查询,然后关闭。我的第一条线索是关闭每个函数之间的数据库,我做到了——但由于我“一

我目前正在更新我的PHP知识,在从数据库中获取数据时遇到了一个问题

我自己的问题可能是通过max_连接设置来解决的(是的,我已经搜索过了),但我相信这可能是一个解决办法,因为如果不需要的话,我不想更改基本设置

我的小“梯子”上有三个“台阶”; 我的主要是一个梯子,每个梯子有一个(或多个)台阶,每个台阶有一个(或多个)模块

所以我要做的是一个函数,它检索所有这些并显示它们。现在,每个函数都连接到我的数据库;函数运行其查询,然后关闭。我的第一条线索是关闭每个函数之间的数据库,我做到了——但由于我“一次”检索我的代码,这不起作用(请参阅代码)

我如何建立一个数据库连接(可能在函数中)并调用一次,然后检索所有信息,而不打开新的连接

我希望你有回答我的问题所需的所有信息,我希望我以堆栈溢出的方式发布这些信息

先谢谢你

附言:不知道如果我正确使用这个代码工具,它看起来是结构化的,但没有突出显示

代码:


只需连接数据库一次,并将其作为参数传递,如下所示:

<?php

  function displayResult($db) {

    $sql = "
      SELECT *
      FROM ladders
    ";
    $result = $db->query($sql);

    // ADD ERROR CHECKING HERE
    // What happens if the query fails?

    $r = '<table>';
    while ($row = $result->fetch_object()) {
      $r .= '<tr>'; 
      $r .= '<td>' . htmlspecialchars($row->ladderID) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->ladderName) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->created) . '</td>';
      $r .= '</tr>';
      $r .= displayAssociateStep($db, $row->ladderID);
      $r .= '<tr><td colspan="3">&nbsp;</td></tr>';
    }
    $r .= '</table>';

    return $r;

  }

  function displayAssociateStep($db, $ladderID) {

    // Are you 100% certain $ladderID is always safe to use in a query?
    // Does it need escaping?
    $sql = "
      SELECT *
      FROM steps
      WHERE ladderID = $ladderID
    ";
    $result = $db->query($sql);

    // ADD ERROR CHECKING HERE
    // What happens if the query fails?

    $r = '';

    while ($row = $result->fetch_object()) {
      $r .= '<tr>';
      $r .= '<td></td>'; 
      $r .= '<td>' . htmlspecialchars($row->stepName) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->created) . '</td>';
      $r .= '</tr>';
    }

    return $r;

  }

  // Connect once
  $db = new mysqli ('localhost', 'website', 'dog', 'nplus');

  // Pass the connection in as an argument      
  echo displayResult($db);

  // Close the connection
  $db->close();

我想说。。。将displayResult中的$db变量作为添加的参数传递给DisplayAssociateTestEP。这样,您就不再需要在DisplayAssociateStep中打开/关闭连接。

这是您想要做的吗?

在使用函数之前创建$db对象怎么样?您创建它,将其作为参数传递给函数(或使其成为全局的,以便它们可以访问),使用函数,然后关闭它?这样,你只有一个到数据库的连接。这就解决了它!此外,还有更好、更简洁的代码和跨距。谢谢!:)不用担心——尽管我刚刚意识到它产生的HTML并不完全正确。我认为您需要添加
$r.=''
$r.=displayAssociateStep($db,$row->ladderID)之后否则,将有大量未关闭的表行。大多数浏览器都会自动纠正这个问题,但如果你不解决它,你可能会发现你得到了意想不到的结果。您还需要将
colspan=“4”
添加到最后一行的
。我已经用更正编辑了我的代码。另一个小修正-实际上您只生成了3列,而不是4列-如果您想看到表结构中的任何错误,请将
style=“border:1px solid\000000”
添加到
中。请记住,确保每一行中的单元格数量相等,并正确关闭所有单元格,否则可能无法正确显示。谢谢各位。我甚至在我的问题上得到奖励。明亮的
<?php

  function displayResult($db) {

    $sql = "
      SELECT *
      FROM ladders
    ";
    $result = $db->query($sql);

    // ADD ERROR CHECKING HERE
    // What happens if the query fails?

    $r = '<table>';
    while ($row = $result->fetch_object()) {
      $r .= '<tr>'; 
      $r .= '<td>' . htmlspecialchars($row->ladderID) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->ladderName) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->created) . '</td>';
      $r .= '</tr>';
      $r .= displayAssociateStep($db, $row->ladderID);
      $r .= '<tr><td colspan="3">&nbsp;</td></tr>';
    }
    $r .= '</table>';

    return $r;

  }

  function displayAssociateStep($db, $ladderID) {

    // Are you 100% certain $ladderID is always safe to use in a query?
    // Does it need escaping?
    $sql = "
      SELECT *
      FROM steps
      WHERE ladderID = $ladderID
    ";
    $result = $db->query($sql);

    // ADD ERROR CHECKING HERE
    // What happens if the query fails?

    $r = '';

    while ($row = $result->fetch_object()) {
      $r .= '<tr>';
      $r .= '<td></td>'; 
      $r .= '<td>' . htmlspecialchars($row->stepName) . '</td>';
      $r .= '<td>' . htmlspecialchars($row->created) . '</td>';
      $r .= '</tr>';
    }

    return $r;

  }

  // Connect once
  $db = new mysqli ('localhost', 'website', 'dog', 'nplus');

  // Pass the connection in as an argument      
  echo displayResult($db);

  // Close the connection
  $db->close();