在php中从输入字段向现有表中添加列

在php中从输入字段向现有表中添加列,php,mysql,pdo,Php,Mysql,Pdo,我使用pdo和mysql,我已经知道如何将列添加到现有表中,但是当我尝试使用输入字段中的值时,变量$..的名称。。。。正在添加为列。 我必须将输入字段中的值添加为列的代码如下所示: public function insertAlterTable($colName) { $this->pdo = $this->connectMySql(); $query = 'ALTER TABLE nbs_events ADD $colName CHAR(5) NULL DEFAU

我使用pdo和mysql,我已经知道如何将列添加到现有表中,但是当我尝试使用输入字段中的值时,变量$..的名称。。。。正在添加为列。
我必须将输入字段中的值添加为列的代码如下所示:

public function insertAlterTable($colName)
{
    $this->pdo = $this->connectMySql();
    $query = 'ALTER TABLE nbs_events ADD $colName CHAR(5) NULL DEFAULT "nee"';
    $stmt = $this->pdo->prepare($query);
    if(!$stmt->execute()){
        return false;
    }
    $this->pdo = null;
    return true;
}
此代码被包装在try-catch块中。
也在类内。
在frontpage中,我使用以下代码:

insertAlterTable($_POST['colname']);
如何将输入字段
colname
as列中的值添加到现有表中。
请帮忙

我已按如下方式更新了代码,因此它对我有效:

public function insertAlterTable($colName)
{ 
    $colName = mysql_real_escape_string($colName);
    $this->pdo = $this->connectMySql();
    $query = "ALTER TABLE nbs_events ADD $colName CHAR(5) NULL DEFAULT \"nee\"";
    $stmt = $this->pdo->prepare($query);
    if(!$stmt->execute()){
        return false;
    }
    $this->pdo = null;
    return true;
}

在PHP中,使用单引号时,变量不会展开

 $a = "hello";
 $b = "$a dude";               // $b is now "hello dude"
 $c = '$a dude';               // $c is now "$a dude"
使用双引号或字符串连接即可:

 $query = "ALTER TABLE nbs_events ADD $colName CHAR(5) NULL DEFAULT \"nee\"";

《精细手册》中有更多内容:

您真的不应该在这里使用
$\u POST['colname']
变量,这是一个很大的安全漏洞,任何人都可以随意注入sql。@acme我想prepare语句会解决这个问题,所以我不需要使用例如
mysql\u real\u escape\u string
?您基本上是对的,但是您自己将字符串粘在一起,而不是将输入参数与
execute
一起使用。因此没有自动转义。@acme请参阅问题中的“我的更新”,如果您试图在查询中的$colName周围添加双引号,但没有添加任何内容,函数将返回false;是的,我试过几次,但都没成功。我更新了答案。你试过了吗?如果它不起作用,你会收到任何错误信息吗?是的,它起作用了,所以它和单引号/双引号有关。