Как подключиться к базе данных, используя PDO в нескольких классах? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть несколько классов, и большинству из них необходимо подключиться к базе данных,

Как я могу установить параметры PDO / host / dbname и т. Д. Только один раз, а затем использовать его в каждом классе, имея в виду следующее:

  1. Я не хочу оборачивать PDO
  2. Мне нужно закрывать соединение PDO после каждого запроса ($db=null), поэтому я просто не могу просто использовать $db = new PDO(...), а затемпередать $db в мои классы

Я хочу пропустить это в каждом классе, который должен подключиться к базе данных:

<?php

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

1 Ответ

0 голосов
/ 17 марта 2019

Если вы хотите получить полный контроль над открытием и закрытием соединений, я предлагаю централизовать только переменные $dsn, $user, $pass и $options.Я предполагаю, что есть также переменные типа $host, $db и $charset, которые вы не раскрыли нам, но давайте добавим их.

Позволяет назвать этот файл global_db.php:

<?php
$host = "127.0.0.1";
$db = "mydb";
$charset = "UTF-8";
$user = "root";
$pass = "";
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

Похоже, что у нас есть все товары, имейте в виду, я не проверяю это, поэтому мы можем получить синтаксическую ошибку или две.

Теперь в наших классах или других файлах php, где мы хотимчтобы открыть соединение.

Позволяет называть эту страницу fooClass.php

<?php
require_once 'global_db.php';

class FooClass {
    public function __construct() {
        try {
            $pdo = new PDO(
                    $GLOBALS['dsn'],
                    $GLOBALS['user'],
                    $GLOBALS['pass'],
                    $GLOBALS['options']);
        } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage(), (int)$e->getCode());
        }
    }
}

Это должно сработать или, по крайней мере, дать вам общее представление о том, куда идти по вашему собственному маршруту.,Есть много других способов сделать подобное, но не нужно слишком усложнять вещи.

nJoy!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...