2017-02-05 21 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 
     )"; 

しかし、注意してください、名前を含む名前は、ほとんど常に悪いデータベース設計の兆候です。

ただ1つの行で多くの表を作成するのではなく、firstname、lastname、emailおよびreg_dateという列を表のユーザーに追加するだけです。また、rand(0,1000)を呼び出してユーザーIDを生成する方法では、衝突が発生します(randはUsersテーブルのIDとして既に使用されている値を返します)。ユーザーIDを生成するには、AUTO_INCREMENTを使用します。

+0

を表示できますか?ご協力いただきありがとうございました。私はデータベース設計の初心者であり、あなたのご意見を歓迎します。少数のユーザーを持つWebアプリケーションを構築しています。管理者のユーザーは、ユーザープロファイルにアクセスしながらコンテンツを追加および削除できます。どのページプロファイルが表示されているかに基づいてコンテンツを表示する方法が必要です。あなたの時間をありがとうございます。 –

+0

ただ1つの行で多くのテーブルを作成するのではなく、 'firstname'、' lastname'、 'email'、' reg_date'という列をテーブル 'Users '。また、 'rand(0,1000)'を呼び出すことによってユーザIDを生成する方法では、結果がcolisionsになります( 'rand'はすでに' Users'テーブルのIDとして使われている値を返します)。なぜあなたはユーザIDを生成するのに '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を表示し、 –

関連する問題