Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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函数查询单个(mysql)数据库的正确方法_Php_Mysql_Database_Function_Mysqli - Fatal编程技术网

使用多个php函数查询单个(mysql)数据库的正确方法

使用多个php函数查询单个(mysql)数据库的正确方法,php,mysql,database,function,mysqli,Php,Mysql,Database,Function,Mysqli,在一个PHP网站上工作时,我遇到了一个我自己无法解决的效率问题 我有两个单独的php文件: php-连接到数据库 php-执行不同sql(mysqli)查询、操作数据并返回数据的两个函数 index.php—执行sqlFunctions.php中的一些函数并使用返回值在页面中显示某些内容的文件 connection.php: ... $GLOBALS['con'] = new mysqli($servername, $username, $password, $dbname); ...

在一个PHP网站上工作时,我遇到了一个我自己无法解决的效率问题

我有两个单独的php文件:

  • php-连接到数据库
  • php-执行不同sql(mysqli)查询、操作数据并返回数据的两个函数
  • index.php—执行sqlFunctions.php中的一些函数并使用返回值在页面中显示某些内容的文件
connection.php:

...

$GLOBALS['con'] = new mysqli($servername, $username, $password, $dbname);

...
sqlFunctions.php:

<?php

    require('connection.php');

    function query1(){
       global $con;
     // mysqli code with $con   
    }
    function query2(){
       global $con;
       // mysqli code with $con
    }
?>
<?php

    require('connection.php');

    function query1(){
     // mysqli code with $GLOBALS['con']
    }
    function query2(){
       // mysqli code with $GLOBALS['con']
    }
?>
class SqlFunctions {
    protected $con;

    public function __construct() {
        global $con; 
        // can also pass $con as parameter or init db here
        $this->con = $con;
    }

    public function query1(){
        // mysqli code with $this->con
    }

    public function query2(){
        // mysqli code with $this->con
    }
}

index.php:

require('SqlFunctions.php');
$sqlFunctions = new SqlFunctions();

<?php echo $sqlFunctions->query1();?>
//简化版
require('sqlFunctions.php');
所以我在想,在每次函数调用时启动到db的新连接不是一个好主意。如果我在sqlFunctions.php中的函数中启动到db的连接,我需要向该文件中的每个函数传递另一个变量/引用/指针(你知道我的意思),这是我不想做的事情

那么,实现我所需要的最好方法是什么呢?

TL;博士;:

  • 主文件调用单独文件中的函数
  • 该函数执行sql查询并返回数据
  • 将显示返回的数据
  • 在每次函数调用时不重新打开/关闭数据库连接。

    • 有几种选择

      备选案文1。在每个函数中声明您的数据库连接为全局

      sqlFunctions.php:

      <?php
      
          require('connection.php');
      
          function query1(){
             global $con;
           // mysqli code with $con   
          }
          function query2(){
             global $con;
             // mysqli code with $con
          }
      ?>
      
      <?php
      
          require('connection.php');
      
          function query1(){
           // mysqli code with $GLOBALS['con']
          }
          function query2(){
             // mysqli code with $GLOBALS['con']
          }
      ?>
      
      class SqlFunctions {
          protected $con;
      
          public function __construct() {
              global $con; 
              // can also pass $con as parameter or init db here
              $this->con = $con;
          }
      
          public function query1(){
              // mysqli code with $this->con
          }
      
          public function query2(){
              // mysqli code with $this->con
          }
      }
      
      sqlFunctions.php:

      <?php
      
          require('connection.php');
      
          function query1(){
             global $con;
           // mysqli code with $con   
          }
          function query2(){
             global $con;
             // mysqli code with $con
          }
      ?>
      
      <?php
      
          require('connection.php');
      
          function query1(){
           // mysqli code with $GLOBALS['con']
          }
          function query2(){
             // mysqli code with $GLOBALS['con']
          }
      ?>
      
      class SqlFunctions {
          protected $con;
      
          public function __construct() {
              global $con; 
              // can also pass $con as parameter or init db here
              $this->con = $con;
          }
      
          public function query1(){
              // mysqli code with $this->con
          }
      
          public function query2(){
              // mysqli code with $this->con
          }
      }
      
      index.php:

      require('SqlFunctions.php');
      $sqlFunctions = new SqlFunctions();
      
      <?php echo $sqlFunctions->query1();?>
      
      require('SqlFunctions.php');
      $sqlFunctions=新的sqlFunctions();
      

      在这种情况下,还可以在类内部初始化连接,或将其作为参数传递给_construct()

      值得深思的是:谢谢!选项1和2正是我想要的!另外,我该如何关闭连接?如果我编写另一个函数来关闭连接,我会按UME键,因为我会将连接作为全局变量?不客气!您可以在完成对该连接的所有调用后关闭该连接。否则,它将在脚本结束时自动关闭。除非您稍后在同一页面上打开了多个其他连接(我对此表示怀疑),否则我会让服务器为您关闭它。这是一个奇怪的答案,您设法给出了3个解决方案,实际上只提供了3个one@your-常识你能解释一下你的意思吗?哪些选项无效?为什么?globals与global完全相同。然而,对象解决方案将再次给您带来相同的问题,但现在不是使用db对象,而是使用您自己的对象。