繁体   English   中英

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

[英]Prepared statement not working with ALTER table queries

我正在编写一个简单的函数,使用带有 PDO 的 PHP 向表中添加一列来准备查询。

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

当我检查数据库时,有一个名为? (即只是一个问号)和我指定的所有属性。

我检查以确保$column变量正确通过,此外,execute 语句返回 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;

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

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

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

数据值是指数字文字、带引号的字符串文字或带引号的日期文字。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM