准备好的语句不使用ALTER表查询

时间:2014-03-21 21:58:58

标签: php mysql sql pdo

我正在编写一个简单的函数,使用PHP和PDO为表添加列以准备查询。

连接($dbh)有效,其他不涉及参数的查询有效。但是,添加列的重要查询不会。

当我检查数据库时,有一个新列,其中包含名为?的列(即只是一个问号)以及我指定的所有属性。

我检查确保$column变量正确通过,另外,执行语句返回false,因此声称语句失败,但不知何故仍然创建了一列。

错误信息对我(至少对我来说)没有多大帮助:

Array ( [0] => 00000 ). 

我在代码中搜索了简单的拼写错误,但无法发现任何内容。有什么想法吗?

$qry='ALTER TABLE `completed` ADD `:column` TINYINT(1) NOT NULL DEFAULT 0';
$stmt = $GLOBALS['dbh']->prepare($qry);
$stmt->bindParam(":column",$column,PDO::PARAM_STR);
$stmt->execute();
$arr = $stmt->errorInfo();
print_r($arr);
$stmt===TRUE ? $return=1 : $return=0;

1 个答案:

答案 0 :(得分:3)

http://dev.mysql.com/doc/refman/5.6/en/prepare.html说:

  

参数标记只能在数据值出现的地方使用,   不适用于SQL关键字,标识符等。

标识符是指数据库名称,表名,列名,索引名,分区名等。

根据数据值,它们表示数字文字,带引号的字符串文字或带引号的日期文字。

要添加新列,您需要在准备查询之前在SQL字符串中包含该列的名称。这意味着您可以确保列名中没有可能会产生SQL注入漏洞的有趣字符。