是否可以通过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'));
但失败了。
谢谢。
是否可以通过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'));
但失败了。
谢谢。
alter table查询的性质,据我所知是没有准备好的语句。但是,对于大多数表变更查询,您应该调用beginTransaction
和commit()
函数。
$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 TABLE
和DROP TABLE
查询提交()函数,所以回退是不可能的。另外,如果你想将变量传递给一个alter table查询,确保清理你的用户输入(如果它是来自哪里的),并在你的db上创建一个存储过程,然后用PDO调用它并附上你的变量inout。只是想一想你的问题如何措辞。
在给予隐式提交的情况下在MySQL中执行DDL时打开事务没有意义。事实上,甚至假装它可以工作,这完全是一个糟糕的建议。 – Charles 2012-12-18 00:55:06
因为它失败了,这是不可能的。 – hjpotter92 2012-04-04 22:05:22
@TheJumpingFrog因为我问了很多关于堆栈溢出的问题,但都没有通过测试,他们中的每一个都被回答了。 – cgwebprojects 2012-04-04 22:08:02