Метод соединения PHP и MySQL - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть файл .php с именем db_conn.php, который устанавливает соединение с базой данных. Вот код файла.

<?php
  $servername = "localhost";
  $username = "root";
  $password = "password";
  $dbname = "db_name";
  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
      die("Connection failed: ");
  }
  else{
  }
?>

Когда мне нужно выполнить некоторые операции с базой данных из другого файла, например из файла login.php, я использую функцию include_once(), предоставляющую местоположение для db_conn.php в качестве параметра. Я делаю то же самое для другого файла PHP, который требует доступа к БД. У меня есть несколько сомнений относительно этой практики / метода.

1. Можно ли это сделать, поскольку я использую функцию include_once() и вызываю скрипт подключения к БД более одного раза? Будут ли открываться новые соединения каждый раз? Если да, как это должно быть реализовано?

2. Если кто-то попытается включить файл из внешнего домена с помощью include_once("www.mywebsite.com/php/db_conn.php"), сможет ли он выполнять запросы БД в моей БД?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

1. Это нормально, так как я использую функцию include_once () и вызываю скрипт подключения к БД более одного раза? Будет ли это открыть новый соединения каждый раз? Если да, как это должно быть реализовано?

Вы должны использовать require_once("db_conn.php");

http://php.net/manual/en/function.require-once.php

Вот различия между include(), include_once(), require() и require_once()

Разница между require, include, require_once и include_once?

2. Если кто-то попытается включить файл из внешнего домена с помощью include_once («www.mywebsite.com/php/db_conn.php»), они будут в состоянии выполнять запросы БД на моей БД?

Если этот параметр отключен / не разрешен по умолчанию на большинстве веб-серверов (php.ini), поэтому вы не можете использовать include для включения файлов с удаленных адресов по причинам безопасности .

Если вы все еще хотите разрешить включение удаленных файлов, директива allow_url_include должна быть установлена ​​на On в php.ini

Но опять же, это плохая практика с точки зрения безопасности; и, таким образом, он вообще отключен (на самом деле я никогда не видел его включенным)

Если вы хотите прочитать содержимое удаленного файла, хотя , вы можете использовать функцию file_get_contents вместо НО он будет возвращен как чистый код HTML-разметки, никакого серверного кода не будет.

Ссылка: включая файл php с другого сервера с php

0 голосов
/ 04 ноября 2018
  1. Это нормально, так как я использую функцию include_once () и вызываю скрипт подключения к БД более одного раза? Будет ли это открыть новый соединения каждый раз? Если да, как это должно быть реализовано?

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

  1. Если кто-то попытается включить файл из внешнего домена с помощью include_once («www.mywebsite.com/php/db_conn.php»), он будет в состоянии выполнять запросы БД на моей БД?

Обычно нет. Любой, кто запросит этот URL, просто получит пустую страницу. Однако рекомендуется размещать такие библиотечные файлы вне корневого каталога документов веб-сервера. Например:

/path/to/project
    /public
        index.php
    /lib
        db_conn.php

Здесь вы указали бы свой веб-сервер на /path/to/project/public, а затем в вашем index.php вы бы сделали что-то вроде:

require_once '../lib/db_conn.php';

Или, может быть:

ini_set('include_path', '/path/to/project/lib');
require_once 'db_conn.php';

Таким образом, ваш собственный код может ссылаться на файлы PHP в /lib, но их нельзя запросить напрямую через веб-сервер.

...