2012-04-04 26 views
5

Có thể thêm thông số với ALTER TABLE bằng PDO hay không.ALTER TABLE với PDO và các tham số?

Tôi đã thử,

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

Nhưng nó đã thất bại.

Cảm ơn.

+0

vì không thành công, không thể thực hiện được. – hjpotter92

+2

@ TheJumpingFrog vì tôi đã hỏi nhiều câu hỏi về tràn ngăn xếp đã thất bại trong kiểm tra, mỗi một trong số chúng đã được trả lời. – cgwebprojects

Trả lời

0

Bản chất của các truy vấn bảng thay đổi, với kiến ​​thức của tôi không phải là các báo cáo được chuẩn bị. Nhưng bạn nên gọi các hàm beginTransactioncommit() cho hầu hết các truy vấn thay đổi bảng.

$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(); 

Mặc dù bạn có thể sử dụng các số liệu đã chuẩn bị và thực hiện theo như tôi biết.

LƯU Ý:
MySQL ngầm gọi hàm cam kết() trên CREATE TABLEDROP TABLE truy vấn, vì vậy rollback là không thể.

Ngoài ra, nếu bạn muốn chuyển các biến cho truy vấn bảng thay đổi, hãy đảm bảo vệ sinh đầu vào của người dùng (nếu đó là nơi nó đến) và tạo một thủ tục được lưu trữ trên db của bạn, sau đó gọi nó bằng PDO và đính kèm các biến của bạn cho inout. Chỉ là một suy nghĩ liên quan đến câu hỏi của bạn được diễn đạt như thế nào.

+0

Không có điểm trong việc mở một giao dịch khi thực hiện DDL trong MySQL với cam kết ngầm định. Trong thực tế, đó là lời khuyên hoàn toàn tồi tệ để thậm chí * giả vờ * rằng nó có thể làm việc. – Charles

Các vấn đề liên quan