Передача соединения дб в функцию - PullRequest
1 голос
/ 09 апреля 2020

У меня есть функция базы данных, и я пытаюсь выяснить, можно ли передать информацию о БД в том же формате, что и новая функция

Я использовал глобальную функцию соединения с БД, но мне сказали, что это плохая практика, поэтому я написал одну из своих функций следующим образом

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){

1 Ответ

0 голосов
/ 09 апреля 2020

Да. Это обычная практика - использовать шаблон синглтона, чтобы справиться с этим. Это пример кода для 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...