功能

时间:2017-05-09 16:58:55

标签: php mysql function database-connection

所以我对PHP很新,几乎没有问题。所以我有一个主索引页面,其中包括页眉页面和功能页面。在索引页面的主体中,我调用了一些函数。

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

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

这对我来说似乎并不高效。这是正确的方法(在每个函数内部调用一个连接)还是有一个解决方案/最佳实践,这样我每个页面只打开一个数据库连接,而不管所调用的函数数量是多少?再次,当我从函数本身删除连接时,我得到一个失败。我的连接函数如下所示:

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;
} 

因此我的标头在索引加载时调用此函数。然后我的每个函数再次调用它:

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

最初我假设标题连接就足以满足所有功能,只要在标题中有连接的页面上调用函数,但我发现情况并非如此。我的功能只有在我在每个功能中打开另一个连接时才有效。我不确定为什么标题中的初始连接不会对我页面正文中的函数保持开放?感谢您的任何帮助。

同样,当我从函数中删除数据库连接时,函数&#34;失败&#34;好像没有数据库连接,即使我在标头中调用连接。感谢。

2 个答案:

答案 0 :(得分:0)

您正在处理Variable Scope

在PHP函数中,没有引用&#34;外部世界&#34;存在。

su -c "scp /var/www/docs/web.config.txt your_user@client_machine:" userA

然而,这是一个广泛的主题,这个简化的例子只能打破僵局并解决您的直接问题。你真的应该阅读有关Scope的内容,因为除了你的数据库连接之外,这会让你在更多的地方咬人......

答案 1 :(得分:0)

您的连接未保留,因为$ dbconnection变量未传递给您的其他函数。

您需要在标题中执行以下操作:

$db = wm_connectToDatabase ();

然后在您的其他功能中,修改它们以便它们获取您已经建立的数据库连接:

fctn1($table, $db);

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

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