2012-04-04 17 views
5

Es posible agregar parámetros con ALTER TABLE con PDO.¿ALTER TABLE con PDO y parámetros?

He tratado,

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

Pero fracasó.

Gracias.

+0

ya que falló, no es posible. – hjpotter92

+2

@TheJumpingFrog ya que he hecho muchas preguntas sobre el desbordamiento de la pila que no han sido probadas, cada una de ellas ha sido respondida. – cgwebprojects

Respuesta

0

La naturaleza de las preguntas de la tabla de cambios, que yo sepa, no son declaraciones preparadas. Pero debe llamar a las funciones beginTransaction y commit() para la mayoría de las consultas que modifican la tabla.

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

Aunque podría usar los enunciados preparados y ejecutar por lo que yo sé.

NOTA:
MySQL llama a la función implícita commit() en CREATE TABLE y DROP TABLE consultas, por lo que la reversión no es posible.

Además, si desea pasar variables a una consulta de tabla alternativa, asegúrese de desinfectar su entrada de usuario (si es de donde proviene), y cree un procedimiento almacenado en su base de datos, luego llámelo utilizando DOP y adjunte sus variables para inout. Solo un pensamiento con respecto a cómo se formuló tu pregunta.

+0

No tiene sentido abrir una transacción cuando se hace DDL en MySQL dada la confirmación implícita. De hecho, es totalmente un mal consejo incluso pretender * que podría funcionar. – Charles

Cuestiones relacionadas