унифицировать инициализацию базы данных в php файле - PullRequest
0 голосов
/ 30 октября 2018

Я совершенно новичок в PHP. Я создаю сайт.

На нескольких страницах я начинаю свой код с:

<?php

$dsn = "mysql:host=localhost;dbname=db;";
$options = [
  PDO::ATTR_EMULATE_PREPARES   => false,
  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
  $pdo = new PDO($dsn,'root','', $options);
} catch (Exception $e) {
   die('Erreur : ' . $e->getMessage());
}

   //rest of the php + html code here

Я хотел бы объединить этот код в один файл php и вызывать $ pdo на каждой странице. Но я хочу сделать это безопасным способом. Может ли кто-нибудь помочь.

Ответы [ 2 ]

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

Сохраните код подключения в файле. Давайте назовем это db_connect.php. Затем, используя правильный путь, добавьте следующее к каждому файлу, требующему подключения к базе данных:

include('path/to/db_connect.php');

Вы также можете использовать include_once(), require() или require_once() в зависимости от ваших потребностей.

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

Лучше использовать для этого синглтон . Таким образом, вы избегаете открытия нескольких соединений с базой данных:

<?php

class Database
{
    public static $pdo;

    public static function getPDO()
    {
        if (null === self::$pdo) {
            $dsn = "mysql:host=localhost;dbname=db;";
            $options = [
              PDO::ATTR_EMULATE_PREPARES   => false,
              PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            ];
            try {
              self::$pdo = new PDO($dsn,'root','', $options);
            } catch (Exception $e) {
               die('Erreur : ' . $e->getMessage());
            }
        }

        return self::$pdo;
    }

    //protected constructor
    protected function __construct()
    {
    }
}

Тогда используйте

require_once('path/to/database.php'); //the file with Database class
$pdo = Database::getPDO();

Конечно, вам нужно включить этот файл / класс в каждую страницу. Кроме того, не стоит жестко кодировать учетные данные вашей базы данных. Лучшая загрузка из файла .env, getenv() или .ini.

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