2016-07-13 106 views
1

我有一個表tracker_item看起來像這樣無法創建MySQL表

tracker_item 

id heading trackerid 
1 name   1 
2 location  1 
3 age   1 
4 candidate 2 
5 area   2 

我希望能按照使用低於標題參數trackerid創建不同的數據庫表。 例如ACC上表tracker_item我想,兩個表應獲得創建

table1 

id name location age 


table 2 
id candidate area 

,我試過的代碼是

$sql="SELECT * FROM `tracker_item` where trackerid='".$trackerid."' "; 
$result = mysqli_query($con, $sql); 
if(mysqli_num_rows($result)>0) 
    { 
     while($row = mysqli_fetch_assoc($result)) 
      { 
       echo $sql1 = "CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 

         ". 

         $row['heading'] 


         ." VARCHAR(30) NOT NULL, 


       resume VARCHAR(50) 
        )"; 

      } 
       if (mysqli_query($con, $sql1)) 
        { 
         echo "Table created successfully"; 
        } 
       else 
        { 
         echo "Error creating table: " . mysqli_error($con); 
        } 
    } 

輸出$ SQL1,我得到的是

CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, resume VARCHAR(50)) 
CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, location VARCHAR(30) NOT NULL, resume VARCHAR(50)) 
CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, age VARCHAR(30) NOT NULL, resume VARCHAR(50)) 

而不是多個表我想獲得$ sql1的o/p看起來像下面這樣一個表可以在數據庫中創建一個表

CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, location VARCHAR(30) NOT NULL, age VARCHAR(50)) 

誰能請告訴它如何可以做到

+0

[Little Bobby](http://bobby-tables.com/)說*** [您的腳本存在SQL注入攻擊的風險。](http://stackoverflow.com/questions/60174/how- ***)瞭解[MySQLi](http://php.net)的[prepared](http://en.wikipedia.org/wiki/Prepared_statement)語句/manual/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

@Jay Blanchard這只是一個虛擬工作的邏輯,我會在以後照顧安全,將不勝感激,如果你能幫助我的主要問題 – sammy001

+0

[這就是爲什麼我們不斷重複SQL注入攻擊警告。] (http://stackoverflow.com/questions/38297105/mysql-real-escape-string-not-working-for-this-specific-example-mysql-real-escap) –

回答

2

你只需要修改你的while循環和循環之前做CREATE。你只希望循環通過級聯添加列:

if(mysqli_num_rows($result)>0) 
    { 
    $sql1 = "CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, "; 
    while($row = mysqli_fetch_assoc($result)) 
    { 
     $sql1 .= $row['heading']." VARCHAR(30) NOT NULL, "; 
    } 
    $sql1 .= "resume VARCHAR(50)) "; 

    if (mysqli_query($con, $sql1)) 
    { 
     echo "Table created successfully"; 
    } 
    else 
    { 
     echo "Error creating table: " . mysqli_error($con); 
    } 
} 

串連整個查詢以這種方式,然後執行查詢。

輸出:

CREATE TABLE item (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, location VARCHAR(30) NOT NULL, age VARCHAR(30) NOT NULL, candidate VARCHAR(30) NOT NULL, area VARCHAR(30) NOT NULL, resume VARCHAR(50)) 

我討厭當人們說「我不會太遠沿...」「這個網站會不會公開?」「這隻適用於學校,所以安全無關緊要......」。如果教師和教授從一開始就沒有談論安全問題,他們就錯了。挑戰他們。他們正在教導草率和危險的編碼習慣,學生們稍後將不得不忘記。我也恨它,當人們說,「我會在以後添加的安全......」「安全現在並不重要......」「忽略安全風險......」。如果您第一次沒有時間做對,那麼您什麼時候能找到時間來添加它?

+0

我得到語法錯誤 – sammy001

+0

什麼語法錯誤是你得到了嗎? –

+1

對不起,錯誤是從我的最後,你的代碼已經工作。非常感謝你所說的安全性,從第1天開始肯定會對它起作用 – sammy001