多数据库连接功能

Multiple Database Connect in Function

所以我对 PHP 还很陌生,几乎没有什么问题。所以我有一个主索引页面,其中包括一个 header 页面和一个功能页面。在索引页的body中,我调用了几个函数。

在我的 header 包含中,我有我的数据库连接,它与索引页一起加载。在我的每个函数中,我都没有调用新的数据库连接,因为我认为 header 中的数据库连接将在我的函数 运行 中保持打开状态。好吧,即使在 header 中打开了数据库连接,但在调用需要数据库访问的函数时,我收到一条错误消息(数据库连接失败)。

所以我为我的每个函数添加了一个数据库连接,它工作正常。我的问题是,当页面通过 header 加载时,我正在打开一个数据库连接。然后我在调用每个函数时打开另一个连接,这可能是此页面上的 3-5 个数据库连接调用。

这对我来说似乎效率不高。这是正确的方法(在每个函数中调用一个连接)还是有 solution/best 的做法,这样我每页只打开一个数据库连接,而不管调用的函数数量如何?同样,当我从函数本身删除连接时,我失败了。我的连接函数如下所示:

function wm_connectToDatabase () {
    $dbhost = "xxx";
    $dbuser = "xxx";
    $dbpass = "xxx";
    $dbname = "xxx";
    $dbconnection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    if(mysqli_connect_errno()){
        die("Connection Failed: ". mysqli_connect_error() ."(". mysqli_connect_errno() .")");
    } else {
        echo "</br>Connection Success</br>";
    }
    return $dbconnection;
} 

所以我的 header 在加载索引时调用此函数。然后我的每个函数都像这样再次调用它:

function fctn1($table){
    $db = wm_connectToDatabase ();
    ...function stuff here...
}
function fctn2($table){
    $db = wm_connectToDatabase ();
    ...function stuff here...
}

最初我假设 header 连接足以满足所有功能,只要在 header 中有连接的页面上调用这些功能,但我发现这不是案件。我的函数只有在我在每个函数中也打开另一个连接时才有效。我不确定为什么 header 中的初始连接不会对我页面的 body 中的功能保持打开状态?感谢您的任何帮助。

同样,当我从函数中删除数据库连接时,函数 "fail" 就像没有数据库连接一样,即使我在 header 中调用连接也是如此。谢谢

您正在处理Variable Scope

在 PHP 函数中,不存在对 "outside world" 的引用。

$bar = 'foo';

function sayThis() {

    echo $bar;   // $bar is empty/uninitialized, prints nothing
}

function sayItReally() {

    global $bar; // tell PHP you plan to reference the outside world
    echo $bar; // this will work
}

但是,这是一个宽泛的主题,这个简化的示例只是为了打破僵局并解决您眼前的问题。您真的应该阅读有关 Scope 的内容,因为除了数据库连接之外,它还会在更多地方影响您...

您的连接无法保持,因为 $dbconnection 变量没有传递给您的其他函数。

您需要在页眉中执行类似的操作:

$db = wm_connectToDatabase ();

然后在您的其他函数中,修改它们,以便它们采用您已经建立的数据库连接:

fctn1($table, $db);

你也可以像这样使用全局变量:

function fctn1($table){
     global $db;
}