2017-02-05 3 views
1

У меня переменное значение whos - это случайное число от 0 до 1000, я бы хотел использовать это как имя при создании новой таблицы. Я попытался сделать это, объединив свой sql с переменной, которая хранит случайное число, это не сработало, есть ли способ сделать это? БлагодаряИспользовать переменную как имя таблицы при создании таблицы в mysql

include 'includes/db_connect_ssg.php'; 

if (isset($_POST['new_user_name'])&&isset($_POST['new_user_password'])) { 
    $username = $_POST['new_user_name']; 
    $password = $_POST['new_user_password']; 
    $randID = rand(0,1000); 
    $sql = "INSERT INTO `Users`(`id`, `username`, `password`, `admin`, `href`) VALUES ('$randID','$username','$password','0','ssgprofile.php?id=$randID')"; 

    $query = mysqli_query($dbc, $sql); 

    $id = (string)$randID; 



     $q = "CREATE TABLE CONCAT('userTable_',$id) (
     id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
     firstname VARCHAR(30) NOT NULL, 
     lastname VARCHAR(30) NOT NULL, 
     email VARCHAR(50), 
     reg_date TIMESTAMP 
     )"; 




    $qquery = mysqli_query($dbc, $q); 



    if ($query&&$qquery) { 
     include 'admin_loadUsers.php'; 
    }else{ 
     echo "Could not connect sorry please try again later, for more info please contact BB Smithy at 0838100085"; 
    } 
} 

ответ

2

Вы могли бы просто использовать:

$q = "CREATE TABLE `userTable_".$id."` (
     id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
     firstname VARCHAR(30) NOT NULL, 
     lastname VARCHAR(30) NOT NULL, 
     email VARCHAR(50), 
     reg_date TIMESTAMP 
     )"; 

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

Вместо того, чтобы создавать множество таблиц с одной строкой, просто добавьте столбцы firstname, lastname, email и reg_date в свою таблицу Users. Также ваш способ генерации идентификатора пользователя путем вызова rand (0,1000) приведет к коллизиям (rand вернет значение, которое уже используется как идентификатор в таблице Users). Используйте AUTO_INCREMENT для генерации идентификаторов пользователей.

+0

Привет, спасибо за вашу помощь, которая сработала, я новичок в дизайне базы данных и буду благодарен вам за ввод, я создаю веб-приложение с небольшим количеством пользователей. Содержание, которое они видят, определяется пользователь Admin, он может добавлять и удалять контент во время посещения профиля пользователя. Мне нужен способ отображения содержимого на основе того, какой профиль страницы отображается. Любые идеи об этом или ресурсы, на которые вы могли бы обратить внимание, спасибо за ваше время. –

+0

Вместо того, чтобы создавать много таблиц с одной строкой, просто добавьте в свою таблицу 'колонки' 'firstname',' lastname', 'email' и' reg_date' '. Также ваш способ генерации идентификатора пользователя путем вызова 'rand (0,1000)' приведет к коллизиям ('rand' вернет значение, которое уже используется как идентификатор в таблице« Пользователи »). Почему вы не используете 'AUTO_INCREMENT' для генерации идентификаторов пользователей? –

+0

Данные пользователей хранятся в таблице «Пользователи», которая состоит из имени пользователя и т. Д. Однако мне нужна таблица для хранения большого количества ссылок, которые отличаются для каждого пользователя, поскольку они добавляются пользователем администратора. Столбцы в приведенном выше примере - это те, которые я использовал для целей тестирования. –

0

Вы не действительное имя таблицы

Из документов Mysql:

Identifiers may begin with a digit but unless quoted may not consist solely of digits 
+0

Привет, спасибо за ввод. Я использовал некоторое приведение типов, чтобы превратить $ randID в строковое значение и использовать функцию CONCAT() в запросе, однако это все еще не работает над идеями? –

+0

Вы можете распечатать $ q и показать –