2017-08-05 42 views
0

此代碼應檢查用戶是否在表中,並且是否爲用戶創建表。現在它只是命名錶$ MyServer。我如何使它成爲名稱是變量$ MyServer。在PHP中爲某些變量創建表(MySQLi)

<?php 
    require "conn.php"; 
    echo "debug 1"; 
    $stmt = $conn->prepare("SELECT * FROM UserData WHERE username = ?"); 
    $stmt->bind_param('s',$username); 
    $username = $_POST["username"]; 
    $stmt->execute(); 
    $stmt->store_result(); 

    echo "debug 2"; 
    if ($stmt->num_rows == 0){ // username not taken 
     echo "debug 3"; 
     $stmt2 = $conn->prepare("INSERT INTO UserData (username, password) VALUES (?, ?)"); 
     $password =($_POST["password"]); 
     $username =($_POST["username"]); 
     $stmt2->bind_param('ss', $username, $password); 
     $stmt2->execute(); 
     $MyServer =($_POST["username"]); 
     $sql = ('CREATE TABLE $MyServer (
      id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
      username VARCHAR(30) NOT NULL 
      )'); 
     if($conn->query($sql) === TRUE){ 
      echo "Table created successfully"; 
     } else { 
      echo "Table is not created successfully "; 
     } 

     if ($stmt2->affected_rows == 1){ 
      echo 'Insert was successful.'; 

     }else{ echo 'Insert failed.'; 
      var_dump($stmt2); 
     } 
    }else{ echo 'That username exists already.';} 

    ?> 
+1

如果要爲每個用戶創建一個表,你需要評估你的數據結構,這通常是一個非常糟糕的主意。 – Difster

+0

另請注意,您對SQL注入攻擊廣泛開放, –

+0

我將如何保護自己 –

回答

1

爲每個用戶創建表並不是個好主意。您需要創建單個表格,您可以在其中存儲所有用戶記錄

但是,如果您確實想要這樣做。您需要更改'"做你的變量可以取值

$sql = "CREATE TABLE $MyServer (
      id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
      username VARCHAR(30) NOT NULL 
      )"; 

看到區別:

http://docs.php.net/manual/en/language.types.string.php

0

儘管我的意見之上,這裏是你在找什麼:注意,現在,「$ MyServer的」不再被視爲一個字符串,但實際變量。

$sql = ('CREATE TABLE ' . $MyServer . '(
     id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
     username VARCHAR(30) NOT NULL 
     )'); 
+0

這不起作用。 –