2014-10-08 30 views
-1

我想使用下面的代碼添加一列到表中。它不讓我通過變量($ document_type)插入列名。PHP的mysqli不通過變量添加列(ALTER TABLE)

$document_type=$_POST['document_type']; 
$category=$_POST['category']; 
$file_extension=$_POST['file_extension']; 

// Database Insert 
$sql_link = Connect_MySQLi_DB(); 
$stmt1 = $sql_link->prepare("INSERT INTO document_type (document_type,category,file_extension) VALUES (?,?,?)"); 
$stmt1->bind_param('sss',$document_type,$category,$file_extension); 

if($stmt1->execute()){ 
//Problem Here 
$sql_link->query("ALTER TABLE hr_types ADD $document_type VARCHAR(255) NULL"); 
} 

如果我靜態鍵入列名稱,它將起作用。但隨着變量,注意到,它甚至不會引發錯誤。任何想法發生了什麼?

+0

變量正確傳遞。這很奇怪,由於某種原因,Yash Sodha的答案奏效了。誰能解釋一下? – 2014-10-08 11:01:52

+0

這是反引號。我只是使用反斜槓包裝'hr_types'和'$ document_type',並開始像魔術一樣工作。它實際上沒有{..}。我認爲這裏涉及到mysql保留的關鍵字。 – 2014-10-08 11:11:40

+0

它是變量數據中的空格! – 2014-10-08 11:35:09

回答

-1

這應該工作。 :)

$sql_link->query("ALTER TABLE `hr_types` ADD `{$document_type}` varchar(255) NULL"); 
+0

你真棒。有用!但是這是怎麼發生的?你能解釋一下嗎? – 2014-10-08 10:58:13

+2

反引號是純粹的SQL語法(如果你的查詢沒有工作,它不太可能解決它,雖然它總是很好用)。首先你有'$ document_type' - 如果PHP通過名稱'$ document'知道一個變量,你會喜歡它嗎?那麼,爲什麼不呢?通過添加'{..}'強制使用完整的變量名稱 – kero 2014-10-08 11:03:37

+0

反引號。我只是使用反斜槓包裝'hr_types'和'$ document_type',並開始像魔術一樣工作。它實際上沒有{..}。我認爲這裏涉及到mysql保留的關鍵字。 – 2014-10-08 11:10:25