Объединение данных подключения в один файл - PullRequest
0 голосов
/ 01 августа 2020

У меня есть файл PHP, который я использую для включения при подключении к своей базе данных. Это выглядит примерно так:

<?php

$mysqlhst = "localhost";
$database = "mydb1";
$username = "my_usr";
$password = "mypas2db1";

try {
    $db = new PDO("mysql:host=$mysqlhst;dbname=$database;charset=UTF8", $username, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
 }
?>

У меня также есть вторая база данных, к которой я часто обращаюсь одновременно с первой. Могу ли я объединить оба соединения таким образом или есть способ лучше?

<?php

$mysqlhst = "localhost";
$database = "mydb1";
$username = "my_usr1";
$password = "mypas2db1";

try {
    $db = new PDO("mysql:host=$mysqlhst;dbname=$database;charset=UTF8", $username, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
 }

$database = "mydb2";
$username = "my_usr2";
$password = "mypas2db2";

try {
    $db2 = new PDO("mysql:host=$mysqlhst;dbname=$database;charset=UTF8", $username, $password);
    $db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
 }
?>

1 Ответ

1 голос
/ 01 августа 2020

Предполагая, что вы не используете классы, вы можете DRY (Do-not Repeat Yourself) немного улучшить свой код следующим образом. Это позволяет при необходимости расширить в будущем еще больше баз данных / пользователей / серверов:

<?php

$connections = [
    'db1' => [
        'host' = 'localhost';
        'database' = 'mydb1';
        'username' = 'my_usr1';
        'password' = 'mypas2db1';
    ],
    'db2' => [
        'host' = 'localhost';
        'database' = 'mydb2';
        'username' = 'my_usr2';
        'password' = 'mypas2db2';
    ],
];

function getDatabaseConnection($connectionName = 'db1'): ?PDO
{
    global $connections;
    if (empty($connections[$connectionName]) {
        // Throw an exception because this connection doesn't exist.
        throw new \Exception(
            "Connection: {$connectionName} not specified."
        );
    }

    $data = $connections[$connectionName];
    $dbHost = $data['host'] ?: 'localhost';
    $dbUsername = $data['username'] ?: '';
    $dbPassword = $data['password'] ?: '';
    $dbName = $data['database'] ?: '';

    if (!$dbUsername || !$dbName) {
        // We don't have a username or database to connect to. Fail.
        throw new \Exception(
            'No valid database name or user provided.'
        );
    }


    $db = new PDO(
        "mysql:host={$dbHost};dbname={$dbName};charset=UTF8",
        $dbUsername,
        $dbPassword
    );
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    return $db;
}

// We don't need to specify a connection because we want the default, db1.
$db1 = getDatabaseConnection();

// Specify we want a connection to db2.
$db2 = getDatabaseConnection('db2');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...