多数据库连接功能
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;
}
所以我对 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;
}