在函数中传递数据库连接

系统检查:

我有一个数据库函数,我想弄清楚是否可以以与新函数相同的格式来传递数据库信息。

我使用的是全局db connect函数,但被告知这是一种不好的做法,因此我编写了以下函数之一

function mysystem(mysqli $db){
  //mystuff here
}

并且它可以毫无问题地连接到数据库。

我的第二个函数有些不同,我创建了一个函数来检查是否存在重复项

function check_duplicate_entries($table, $column_name, $value){

    $db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
    $stmt = $db->prepare("SELECT * FROM $table WHERE $column_name = ?");
    $stmt->bind_param('s', $value);
    $stmt->execute();
    $result = $stmt->get_result();
    $stmt->close();

    if (mysqli_num_rows($result) == 1) {
        return true;
    } else {
        return false;
    }
}

有没有一种方法可以像其他函数一样传递数据库信息,而不用调用新的数据库连接。

像这样

function check_duplicate_entries(mysqli $db, $table, $column_name, $value){
Kostya Ryabchenko:

是。通常使用单例模式来处理此问题。这是PDO的代码示例,您可以将其重构为mysqli

class MysqlConnector
{
    private static $connection;

    private function __construct()
    {
    }

    public static function getConnection(): PDO
    {
        $username = "root";
        $password = "";
        $database = "blog";
        $servername = "localhost";

        if (!empty(self::$connection)) {
            return self::$connection;
        }

        self::$connection = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
        self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        return self::$connection;
    }
}

// now you can get your connection anywhere
// just make sure this class is available in your current namespace
$connection = MysqlConnector::getConnection();
$connection->query('SELECT COUNT(*) FROM articles');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章