2012-04-04 84 views
5

是否可以通过PDO向ALTER TABLE添加参数。与PDO和参数的ALTER TABLE?

我都试过了,

$q = $dbc -> prepare("ALTER TABLE emblems ADD ? TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', ADD ? DATETIME NOT NULL"); 
$q -> execute(array($emblemDB, $emblemDB . 'Date')); 

但失败了。

谢谢。

+0

因为它失败了,这是不可能的。 – hjpotter92 2012-04-04 22:05:22

+2

@TheJumpingFrog因为我问了很多关于堆栈溢出的问题,但都没有通过测试,他们中的每一个都被回答了。 – cgwebprojects 2012-04-04 22:08:02

回答

0

alter table查询的性质,据我所知是没有准备好的语句。但是,对于大多数表变更查询,您应该调用beginTransactioncommit()函数。

$dbh->beginTransaction(); 

/* Change the database schema and data */ 
$sth = $dbh->exec("DROP TABLE fruit"); 
$sth = $dbh->exec("UPDATE dessert 
SET name = 'hamburger'"); 
$sth = $dbh->exec("ALTER TABLE `dessert` ADD `field1` VARCHAR(24) NOT NULL"); 


/* Commit changes */ 
$dbh->commit(); 

虽然您可以使用准备好的陈述并执行,据我所知。

注:
MySQL的隐式调用CREATE TABLEDROP TABLE查询提交()函数,所以回退是不可能的。另外,如果你想将变量传递给一个alter table查询,确保清理你的用户输入(如果它是来自哪里的),并在你的db上创建一个存储过程,然后用PDO调用它并附上你的变量inout。只是想一想你的问题如何措辞。

+0

在给予隐式提交的情况下在MySQL中执行DDL时打开事务没有意义。事实上,甚至假装它可以工作,这完全是一个糟糕的建议。 – Charles 2012-12-18 00:55:06