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");
}
如果我静态键入列名称,它将起作用。但随着变量,注意到,它甚至不会引发错误。任何想法发生了什么?
这应该工作。 :)
$sql_link->query("ALTER TABLE `hr_types` ADD `{$document_type}` varchar(255) NULL");
你真棒。有用!但是这是怎么发生的?你能解释一下吗? – 2014-10-08 10:58:13
反引号是纯粹的SQL语法(如果你的查询没有工作,它不太可能解决它,虽然它总是很好用)。首先你有'$ document_type' - 如果PHP通过名称'$ document'知道一个变量,你会喜欢它吗?那么,为什么不呢?通过添加'{..}'强制使用完整的变量名称 – kero 2014-10-08 11:03:37
反引号。我只是使用反斜杠包装'hr_types'和'$ document_type',并开始像魔术一样工作。它实际上没有{..}。我认为这里涉及到mysql保留的关键字。 – 2014-10-08 11:10:25
变量正确传递。这很奇怪,由于某种原因,Yash Sodha的答案奏效了。谁能解释一下? – 2014-10-08 11:01:52
这是反引号。我只是使用反斜杠包装'hr_types'和'$ document_type',并开始像魔术一样工作。它实际上没有{..}。我认为这里涉及到mysql保留的关键字。 – 2014-10-08 11:11:40
它是变量数据中的空格! – 2014-10-08 11:35:09