Как лучше всего использовать файл подключения к базе данных в PHP?

У меня есть файл connection.php в моей корневой папке, и внизу я добавил BASE_URL

<?php
$hostname = "localhost";
$username="root";
$password='';
$db='demo';


$charset="utf8mb4";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$dsn = "mysql:host=$hostname;dbname=$db;charset=$charset";
try {
        $pdo = new PDO($dsn, $username, $password, $options);
    }
    catch (PDOException $e) {
        throw new PDOException($e->getMessage(), (int)$e->getCode());
  }
  
define('BASE_URL', 'http://example.com/');
?>

Теперь в каждый файл я добавляю файл connection.php

<?PHP 
require($_SERVER["DOCUMENT_ROOT"].'/connection.php');
?>// HTML code start

Это правильный способ использования файла подключения к базе данных? Что я должен использовать include или require?

1 ответ
1

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

Отдельный файл конфигурации

Когда ваш код будет запущен, скорее всего, учетные данные базы данных будут отличаться от тех, что были дома. Следовательно, жестко запрограммировать их в скрипте будет крайне неудобно. Вместо этого создайте отдельный файл для своей конфигурации следующим образом:

  • добавить config.php линия в .gitignore (если вы еще не используете git, вам обязательно нужно)

  • создать файл с именем config.sample.php со всеми переменными, установленными на пустые значения, например:

      return [
          'db' => [
              'host' => '127.0.0.1',
              'username' => '',
              'password' => '',
              'dbname' => '',
              'port' => 3306,
              'charset' => 'utf8mb4',
          ],
          'base_url' => 'http://example.com/',
      ];
    
  • Добавить это к контролю версий

  • тогда в файле начальной загрузки вашего приложения есть такой код:

      <?php
      if (!file_exists('config.php'))
      {
          throw new Exception('Create config.php based on config.sample.php');
      }
      $config = require __DIR__.'/config.php';
    
      define('BASE_URL', $config['base_url']);
    
      $options = [
          PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
          PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
          PDO::ATTR_EMULATE_PREPARES   => false,
      ];
      $dbconf = $config['db'];
      $dsn = "mysql:host=$dbconf[host];dbname=$dbconf[dbname];charset=$dbconf[charset]";
      try {
              $pdo = new PDO($dsn, $username, $password, $options);
      } catch (PDOException $e) {
          throw new PDOException($e->getMessage(), (int)$e->getCode());
      }
      unset($dbconf, $config['db']);
    
  • затем, как предлагается, создайте config.php на каждом сервере, на котором работает ваше приложение, каждый со своим собственным набором значений.

Собственно через соединение

Просто используйте это $pdo переменная. Когда PDO необходим в функции — передайте его как параметр функции. Если какой-то функции не нужен PDO, но она вызывает другую функцию, которой нужен PDO, то передайте $pdo в оба. Да, это кажется неприятным, но так вы всегда будете знать, что и где происходит. Избегайте использования грязных приемов, таких как объявление переменной global, одиночки и тому подобное.

Некоторые мелкие проблемы

  • закрытие тега PHP не требуется и запрещено по стандарту
  • // HTML code start выявляет совершенно неправильный подход к структурированию кода. HTML-код никогда не должен начинаться с самого начала. Ваш PHP-код должен сначала выполнять все манипуляции с данными, а только потом запускать вывод
  • require всегда следует использовать для файлов, жизненно важных для приложения. Поскольку этот файл, безусловно, есть, он должен быть востребован. Обратите внимание, что вам следует избегать использования require_once и тому подобное — в настоящее время это не более чем грязный приём, чтобы прикрыть несогласованный код

  • Спасибо за ответ, сомневаюсь. 1) На данный момент я не использую git. Нужно ли мне создать файл .gitignore в моей корневой папке и добавить файл с именем config.php? 2) Где взять контроль версий? 3) файл начальной загрузки? Вы хотите сказать файл connection.php? 4) Как будет вызывать мой config.sample.php? Вы ничего не добавили

    — user9437856

  • 1. Нет, но тебе стоит начать. 2. git — это контроль версий. 3. Да. Похоже, вы используете connection.php как один, но это уже вводит в заблуждение: у вас есть BASE_URL, определенный в этом файле, который не имеет ничего общего с подключением. и будут другие, не связанные с подключением, но требуемые во всех остальных блоках кода файла. Так что это лучше назвать бутстрапом, чем подключением. 4. Не понимаю, что вы имеете в виду. он вызывается в приведенном выше коде.

    — Ваш здравый смысл


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *