Fexxi Ответов: 2

Новая база данных, названная в соответствии с сеансом['username'] | как бы я справился с этим?


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

Вот функция, которая у меня есть, это явно не то, что мне нужно.

<pre>function CreateDatabase(){
    global $connection;
    global $username;
    
    
    $db_create = "CREATE DATABASE IF NOT EXISTS spiders'; ";
    $select_db =   mysqli_select_db ($connection, '$username');
    $tblCreate = "CREATE TABLE myspiders (genus varchar(80), species varchar(80), name varchar(100), ";
    $tblCreate .= "temper varchar(100), lstFed varchar(10), lstMolt varchar(10), lstSub varchar(10), ";
    $tblCreate .= "maxTemp varchar(3), minTemp int(3), maxHum int(3), minHum int(3), notes int(240))";
    $result = mysqli_query($connection, $tblCreate);
    if(!$result){
        die(mysqli_error($connection));
        if(!$db_create){
            die();
        }
        
        
    }
   }
?>


Что я уже пробовал:

H попытался установить переменную $username из $_SESSION['username'] и сделать переменную глобальной тоже.

2 Ответов

Рейтинг:
7

Afzaal Ahmad Zeeshan

Цитата:
Я думаю, что лучшим способом было бы создать БД на лету в соответствии с именем пользователя.
Почему? Это означает, что ваше приложение должно будет изменить соединение, которое оно использует, по крайней мере базу данных, к которой оно подключается в данный момент.

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

Мультитенантность - Википедия[^]

При таком подходе клиенты и пользователи будут подключаться, но они будут видеть разные данные, основанные на их собственных учетных данных и профиле. Вот почему SQL имеет WHERE введена оговорка. Добавление a WHERE предложение гораздо проще, чем создавать несколько баз данных, управлять ими и продолжать создавать базы данных, для чего-то, что можно легко сделать с одной базой данных, кучей таблиц и т. д. WHERE пункт.

Пища для размышлений, где бы вы хранили имя пользователя и пароль для клиентов?
Цитата:
это явно не то, что мне нужно.
Потому что, возможно, вы пытаетесь жестко закодировать имя базы данных,
"CREATE DATABASE IF NOT EXISTS spiders'; ";
Вы можете видеть, что уже жестко закодировали значение имени базы данных. Может быть, попробуйте использовать интерполяцию строк прямо там, если это действительно то, что вам нужно сделать.

Подробнее читайте здесь, MySQL CREATE DATABASE - создание новой базы данных в MySQL[^]


[no name]

Большое спасибо, приятель. Это кажется хорошим подходом, но дальнейшее гугление привело меня только к Ларвелу. Я пытаюсь сделать это без использования Larvel, поскольку основная цель проекта-кривая обучения PHP. Я продолжу поиски.

Рейтинг:
12

MadMyche

Давай посмотрим... вы отметили этот вопрос с помощью MySql.
MySql-это тип реляционной системы управления базами данных (RDMS).
Это означает, что вещи должны быть связаны

I am making an app by way of practice to keep track of pet spiders and some details.
I have had a think and I think the best way would be to create a DB on-the-fly according to the user's username.
Итак, у нас есть пара вещей, которые связаны между собой. У нас есть пользователи, и у нас есть их домашние пауки.
На данный момент я бы сделал две отдельные таблицы в базе данных: одну для пользователей, а другую для их пауков.

Таблица пользователей будет содержать основную информацию о них; определенно идентификатор (я назову его UserID) и, возможно, их имя и т. д.
CREATE TABLE User (
  UserID INT,
  UserName NVARCHAR(32)
)

Таблица Spider будет начинаться как очень похожая; однако там будет дополнительный столбец для того, кто был владельцем
CREATE TABLE Spider (
  SpiderID INT,
  UserID INT,
  SpiderName NVARCHAR(32)
)

И в этот момент я мог бы запросить эту единственную базу данных и узнать обо всех пользователях, у которых есть пауки
SELECT u.UserName, s.SpiderName
FROM  User        u
INNER JOIN Spider s ON u.UserID = s.UserID -- this is the relationship comes in


Время идет... Вы просто можете обнаружить, что это не идеально.

Что, если брат и сестра владеют одним и тем же пауком? Этот 1:n отношения должны были бы стать многие ко многим, чтобы несколько пользователей могли владеть одним и тем же пауком. Время для а мост таблица для их соединения
CREATE TABLE UserToSpider (
  ndx INT,
  UserID INT,
  SpiderID INT
)
И естественно запрос чтобы узнать все это нужно было бы изменить
SELECT u.UserName, s.SpiderName
FROM  User              u
INNER JOIN UserToSpider x ON u.UserID = x.UserID -- relating User to UserToSpider
INNER JOIN Spider       s ON x.UserID = s.UserID -- relating UserToSpider to Spider

Что касается столбца UserID в исходной таблице Spider... Я хотел оставить его в отличие от его удаления. Вы могли бы перепрофилировать его в качестве основной владелец или что-то в этом роде.

Я остановлюсь, поскольку зашел уже достаточно далеко. Но я уже вижу грядущие перемены; может быть, кто-то и поймает рыбу!

Обратите внимание, что я не работаю с MySql, поэтому синтаксис может быть немного неправильным


[no name]

Большое спасибо за этот подробный ответ. Я обязательно прочитаю это должным образом и попытаюсь сделать это таким образом.