Как я могу динамически переключаться между двумя базами данных

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

Это код на данный момент

              $hostname='localhost';
              $username='root';
              $password='';
              $database='karonlabs_applications';

              /*DEFAULT DATABASE with a table that contains user id */
              $db=new mysqli($hostname,$username, $password,$database);

                 if ($db) { 


           echo 'Connected';


           }else{
               echo 'Cannot connect';
           }

          /* So here my client can be give a database .sql file which he has to upload after signing into the dashboard with credentials from the first database, so what i want is after my client uploading there database forexample like pos_system.sql the system should automatically switch to that uploaded database for the client ,NB: each client has to upload there own database and should access it basing on their login id*/

           if (mysqli_query($db, "USE `pos_system`")){
               echo 'connected to POS DB';
           }else{
               echo 'Cannot connect';
           }

Вы указываете имя базы данных при создании объекта подключения. Существует множество руководств и вопросов (а также руководство по PHP), которые покажут вам, как подключиться к MySQL с помощью PHP.

Patrick Q 04.04.2018 20:54

Вам нужно опубликовать то, что вы пробовали до сих пор.

Spoody 04.04.2018 20:57

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

Akabwai Samuel 04.04.2018 21:04

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

Patrick Q 04.04.2018 21:10

хорошо, просто мой код слишком длинный, он не помещается в поле для комментариев

Akabwai Samuel 04.04.2018 21:14

Код идет в вашем вопросе, а не в комментариях. Прежде чем идти дальше, я предлагаю вам прочитать Как спросить.

Patrick Q 04.04.2018 21:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
224
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как работает подключение

Когда вы создаете соединение из сценария PHP с базой данных (MySQL), вы указываете (среди прочего) имя базы данных. Ваш сценарий устанавливает соединение с сервером БД и соединять с указанной вами базой данных.

Например mysqli_connect:

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

Или объектно-ориентированная версия:

$mysqli = new mysqli("127.0.0.1", "my_user", "my_password", "my_db");

Обратите внимание на последний параметр my_db.

С этого момента вы подключены и за работой в базе данных под названием my_db. Каждый запрос, который вы отправляете в свою базу данных впоследствии, пока вы подключены с указанными учетными данными, выполняется в подключенной базе данных.

Как переключить базу данных

Лучше всего выполнять запрос USE dbname;, но как?

Предположим, у вас есть доступ к двум базам данных на одном сервере:

  • db1 (ваша база данных)
  • db2 (база данных клиента)

Первоначально вы подключаетесь к базе данных db1 с помощью mysqli_connect (так что вам НЕОБХОДИМО сначала подключиться):

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "db1");

Затем вы хотите переключиться на базу данных db2. Просто отправьте команду SQL из PHP с mysqli_query, точно так же, как когда вы выполняете SELECTs, UPDATEs, INSERTs ... и другие команды.

Подключившись к db1, вы делаете:

mysqli_query($link, "USE `db2`");

$link - это ваше соединение, созданное на первом этапе. Если вы используете объектно-ориентированную версию, то это будет:

$mysqli->query("USE `db2`");

Теперь вы подключены к db2, и каждый запрос ПОСЛЕUSE db2; выполняется в базе данных db2.

Но, пожалуйста, имейте в виду, что если вы закроете соединение и снова подключитесь к db1, с кодом из первого шага, вы снова используете иметьUSE db2;. Так что USE полезен, но иногда лучше закрыть соединение с db1 и подключиться напрямую к db2. Зависит от того, как часто вам нужно менять базу данных во время выполнения скрипта.

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

Stefan Crain 04.04.2018 20:55

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

Akabwai Samuel 04.04.2018 20:56

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

Akabwai Samuel 04.04.2018 23:06

Если вы подключаетесь с помощью PDO, вы можете попробовать следующее:

// Connect to the first database
$pdo = new PDO("mysql:host=HOST_NAME;dbname=DATABASE1", USER_NAME, PASSWORD, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]);


// Change to next database
$pdo->exec("use DATABASE2");

Вы можете изначально подготовить соединение, даже не указывая базу данных, просто удалите этот ;dbname=DATABASE1 из строки подключения и просто используйте $pdo->exec("use DATABASE_NAME");

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

$conn->query("use DATABASE2");

Спасибо, Амир, но я еще не знаком с PDO, как я могу это сделать с помощью Core PHP

Akabwai Samuel 04.04.2018 21:00

Core PHP должен подключаться к MySQL с использованием расширения, такого как PDO, mysqli и т. д., Которое вы используете

AamirR 04.04.2018 21:02

я использую $ conn = mysqli_connect ();

Akabwai Samuel 04.04.2018 21:15
Ответ принят как подходящий

Итак, вы можете сделать что-то вроде этого:

В файле php, который проверяет имя пользователя и пароль, выполните следующие действия:

getUsersDB ($user, $password) {
   $db = new mysqli("dbServer", "admin_user", "admin_password", "users");

   if ($db->connect_errno) { /* handle the error */ }

    $user = $mysqli->query("SELECT userName FROM users");
    if ($user === FALSE) { /* handle the error */ }
    else { /* verify users passowrd */ }

    $userDB = $db->query("SELECT database FROM users WHERE user = $user") === TRUE);
    if ($userDB === TRUE) {
        $db->close();
        return $userDB;
    }
}

В файле, где пользователь попадает в свою базу данных, вы делаете:

/* have login scirpt */
$userDB = getUserDB ($user, $password);
$db = new mysqli("dbServer", $user, $userPassword, $userDB);

Надеюсь, это поможет!!!

Я получаю вызов неопознанной функции для этого скрипта / * есть логин scirpt * / $ userDB = getUserDB ($ user, $ password); $ db = новый mysqli ("dbServer", $ user, $ userPassword, $ userDB);

Akabwai Samuel 04.04.2018 23:59

Другие вопросы по теме