Citando manual de MySQL INSERT - mismo ocurre con ACTUALIZACIÓN:Preparación de una declaración/ACTUALIZACIÓN MySQL INSERT con valores por defecto
Use the keyword DEFAULT to set a column explicitly to its default value. This makes it easier to write INSERT statements that assign values to all but a few columns, because it enables you to avoid writing an incomplete VALUES list that does not include a value for each column in the table. Otherwise, you would have to write out the list of column names corresponding to each value in the VALUES list.
Así que en breve si escribo
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
una nueva fila con columna2 establecer como su valor predeterminado, cualquiera que sea, se inserta.
Sin embargo, si me preparo y ejecuta una instrucción en PHP:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
La nueva fila contendrá 'por defecto' como su valor de texto - si la columna es capaz de almacenar valores de texto.
Ahora me han escrito una capa de abstracción de DOP (lo necesitaba) y para solucionar este problema estoy considerando introducir una
const DEFAULT_VALUE = "randomstring";
Así que podría ejecutar comandos como:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
Y luego, en el método que hace que el enlace pase por los valores que se envían para vincular y si algunos son iguales a self::DEFAULT_VALUE
, actúe en consecuencia.
Estoy bastante seguro de que hay una mejor manera de hacerlo. ¿Alguien más ha encontrado situaciones similares?
Desde DOP está procesando sus valores como cadenas sean de entrada, parece que puede que tenga que cambiar el codifica un poco, si eso es posible. Puede cambiarlo para que escriba '... execute (array ('\' value1 \ '', 'DEFAULT'))', pero supongo que PDO está procesando estos valores para usted con 'mysql_real_escape_string() ', etc. Esto vencería a esa función. Probablemente tendrá que simplemente insertarlo directamente en el argumento 'prepare()'. – Jonah
¿Por qué no incluir columnas en su instrucción 'INSERT' que está configurando en un valor distinto al predeterminado? –
El problema es con 'UPDATE' y una entrada enviada vacía. Necesito que sea el predeterminado, no por ejemplo '0000-00-00' para campos de fecha cuando' '' 'se establece como el nuevo valor. – raveren