首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中传递db连接

问在函数中传递db连接
EN

Stack Overflow用户
提问于 2020-04-09 20:27:27
回答 1查看 138关注 0票数 2

我有一个数据库函数,我正在尝试计算是否可以以与新函数相同的格式传递db信息。

我使用的是全局db connect函数,但被告知这是一种糟糕的做法,因此我编写了一个函数,如下所示

代码语言:javascript
复制
function mysystem(mysqli $db){
  //mystuff here
}

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

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

代码语言:javascript
复制
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;
    }
}

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

像这样

代码语言:javascript
复制
function check_duplicate_entries(mysqli $db, $table, $column_name, $value){
EN

回答 1

Stack Overflow用户

发布于 2020-04-09 21:30:09

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

代码语言:javascript
复制
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');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61121162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档