PHP的mysqli不通过变量添加列(ALTER TABLE)

问题描述:

我想使用下面的代码添加一列到表中。它不让我通过变量($ 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

这应该工作。 :)

$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