Разделяют ли два отдельных соединения, использующих одинаковые учетные данные, поток? - PullRequest
0 голосов
/ 23 октября 2018

В процессе преобразования функциональности mysqli_ в PHP для использования PDO.Я сделал несколько страниц CMS для подтверждения концепции, и это привело меня к кроличьей норе постоянных соединений.

Чтобы избежать бессвязных действий, по сути, я делаю соединение с сервером MySQL, используястарый метод mysqli_connect, а также создание нового ресурса PDO, однако, я вижу только один открытый поток.Поскольку они оба используют одни и те же учетные данные для подключения, они используют общий поток?Любая дополнительная информация также приветствуется.

Спасибо!

К сожалению, код принадлежит правительству, но я могу опубликовать некоторые сокращенные фрагменты, если это поможет.

Метод подключения класса базы данных:

try {
        $dsn = "mysql:host="._DBLocation.";dbname="._DBName.";charset=utf8mb4";
        $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
            PDO::ATTR_PERSISTENT                 => true
        ];

        $dbh = new PDO($dsn,_DBUser,self::db_pass(),$options);
        self::$conn = $dbh;
        return $dbh;

    }
    catch (exception $e) {
        print $e->getMessage();
    }

Метод db_pass извлекает пароль из текстового файла на удаленном сервере.Класс просто вызывается через $ pdo = CLASS :: connect ();

Соединение mysqli является одинаковым, однако оно было сделано один раз и сохранялось в сеансе.Пароль получается таким же образом, а также использует предустановленные константы для местоположения и имени БД.

$_SESSION['sql'] = mysqli_connect(_DBLocation,_DBUser,$passwordVar);

Надеюсь, это поможет!

1 Ответ

0 голосов
/ 23 октября 2018

Вы можете создать класс DbHandler и вызывать соответствующую переменную, когда вам это нужно.

Примечание. Это пример кода - вам может потребоваться изменить его в соответствии с вашей кодовой базой.

class DbHandler
{
    protected $pdo;
    protected $mysqli;

    public function __construct($pdo, $mysqli)
    {
        $this->pdo = $pdo;
        $this->mysqli = $mysqli;
    }
}

, а затем использовать его следующим образом:

$dbHandler = new DbHandler(new PDO(.. pdo deets ..), mysqli_connect(.. mysqli deets ..));

print_r($DbHandler->pdo); # will output a PDO object
print_r($DbHandler->mysqli); # will output whatever mysqli is.. an array? Not sure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...