PHP:让其他函数访问我的数据库连接函数中的$ conn变量

时间:2015-08-24 18:15:01

标签: php

让其他函数访问我的数据库连接函数中的$ conn变量

所以在这里,我绝望地试图让事情发挥作用。我知道我试图做的不是OOP也不是100%最佳实践。它不适用于实时网站,我只是在XAMPP上学习一些基本的PHP概念。

我想要做的是是让我的数据库连接函数中的$ conn变量可供所有其他需要它的函数访问。我想把它作为一个参数传递,但是怎么做呢?我不喜欢使用PHP"全球"或$ GLOBALS。我现在的工作方法是使用mysqli使用程序方法。

例如我有这样的事情:

function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
}

function someFunction () {
$result = mysqli_query ($conn, "SELECT * FROM examples)
}

我从来没有找到我的问题的答案...我最近熟悉的大多数解决方案都是基于OOP或使用有些可疑的方法。

-------------------------------------------- -------------------------------------------------- --------------------------------------

解决方案A - 我宁愿避免在包装器中使用全局变量并保持连接:

global $conn = mysqli_connect ("localhost", "root", "", "database");
global $conn;

function someFunction () {
global $conn;
$result = mysqli_query ($conn, "SELECT * FROM examples)
}

解决方案B - 我还没有为OOP做好准备,但我知道这有效。关键是我想学习不同的东西:

class Database
{
    private static $conn;

    public static function getObject()
    {
        if (!self::$conn)
            self::$conn = new mysqli("localhost", "root", "", "database");

        return self::$conn;
    }
}

function someFunction () {
$result = mysqli_query (Database::$conn, "SELECT * FROM examples)
}

解决方案C - 根本不使用功能......只是保持打开状态,从长远来看,我觉得这样做不太实用:

$conn = mysqli_connect ("localhost", "root", "", "database");

$result = mysqli_query ($conn, "SELECT * FROM examples)

-------------------------------------------- -------------------------------------------------- --------------------------------------

我正在努力实现的解决方案:

function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
return $conn;
}

function someFunction () {
$conn = db ();
$result = mysqli_query ($conn, "SELECT * FROM examples)
}

或类似这样的地方,我只是将连接作为参数或其他东西传递(目前是伪代码)

function db () {
$conn = mysqli_connect ("localhost", "root", "", "database");
}

function someFunction ($conn) {
$result = mysqli_query ($conn, "SELECT * FROM examples)
}

-------------------------------------------- -------------------------------------------------- --------------------------------------

那么我如何实现类似最后两个但实际上有效的东西。这个概念可能吗?

4 个答案:

答案 0 :(得分:0)

将参数传递给函数并返回连接

[/Return/ReturnData/Person/Name = Yohanna, /Return/ReturnData/Person[2]/Name = Jacoub]

答案 1 :(得分:0)

简单的答案只是将您的$conn变量传递给另一个调用函数(而不是建立新的连接)

<强> yourpage.php

$conn = new mysqli($servername, $username, $password, $dbname);
someFunction ($conn)//you can add other parameters if you like 

function someFunction ($conn) {
    $result = mysqli_query ($conn, "SELECT * FROM examples);
}

注意:总是为数据库访问建立新连接并不是一种好的做法。所以总是连接一次并在每个地方使用它。(但如果你的要求不同并且需要多个连接,那么你可以进行多次连接)

答案 2 :(得分:0)

本节中的所有答案都是多余的,因为它们只是通过围绕数据库对象创建包装器而造成开销。 为了分离关注点(可维护性),请使用单独的PHP文件进行数据库连接,并使用require_once。

// Inside Database_Connect.php

$ db = mysqi_connect(本地主机,数据库,密码);

现在在任何需要的mysqli_函数中使用$ GLOBALS ['db']。

或者,将脚本/对象初始化为

$ dbConn = $ GLOBALS ['db'];

并在需要的地方在mysqli_函数内使用$ dbConn。

答案 3 :(得分:-1)

如果您有多个需要数据库访问的php文件,那么您可以选择创建一个带连接代码的文件connection.php

<?php
$conn = mysqli_connect ("localhost", "root", "", "database");
?>

在您需要连接的所有其他文件中使用include_once 'connection.php';

相关问题