2012-04-04 14 views
5

E 'possibile aggiungere parametri con ALTER TABLE con PDO.ALTER TABLE con PDO e parametri?

ho cercato,

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

Ma non è riuscito.

Grazie.

+0

poiché non è riuscito, non è possibile. – hjpotter92

+2

@TheJumpingFrog poiché ho posto molte domande sullo stack overflow che non hanno superato i test, a ognuna di esse è stata data una risposta. – cgwebprojects

risposta

0

La natura delle query di alter table, per quanto ne so non sono dichiarazioni preparate. Ma dovresti chiamare le funzioni beginTransaction e commit() per la maggior parte delle query di modifica della tabella.

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

Anche se è possibile utilizzare le istruzioni preparate ed eseguire per quanto ne so.

NOTA:
MySQL chiama implicitamente la funzione commit() sulla CREATE TABLE e DROP TABLE query, quindi rollback non è possibile.

Inoltre, se desideri passare le variabili a una query di tabella alternativa, assicurati di disinfettare l'input dell'utente (se è da dove proviene) e crea una procedura memorizzata sul tuo db, quindi chiamala usando PDO e allega le tue variabili per inout. Solo un pensiero riguardo a come è stata formulata la tua domanda.

+0

Non è necessario aprire una transazione quando si esegue DDL in MySQL dato il commit implicito. In effetti, è assolutamente un cattivo consiglio anche * fingere * che possa funzionare. – Charles

Problemi correlati