У меня есть файл 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 ответ
Хороший вопрос. Хотя сам код подключения хорош, можно внести некоторые улучшения.
Отдельный файл конфигурации
Когда ваш код будет запущен, скорее всего, учетные данные базы данных будут отличаться от тех, что были дома. Следовательно, жестко запрограммировать их в скрипте будет крайне неудобно. Вместо этого создайте отдельный файл для своей конфигурации следующим образом:
добавить
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. Не понимаю, что вы имеете в виду. он вызывается в приведенном выше коде.
— Ваш здравый смысл