2010-02-09 18 views

Respuesta

14
$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->execute(
    $var1, 
    $var2, 
    $var3 
); 
+0

+1: inteligente. Siempre me olvido de unirme. Ni siquiera sabía que funcionaría en este contexto. – hobodave

+0

¡Agradable! Gracias. Si solo pudiera establecer un valor predeterminado para las columnas 'datetime'. – aidan

+1

Tenga en cuenta que 'coalesce' es realmente equivalente a' // ', no' || '. Sin embargo, puede ser lo suficientemente bueno para lo que está haciendo, si '$ var2' nunca contiene la cadena vacía o 0. – cjm

3

Las funciones no se pueden enlazar a los parámetros. MySQL los incluirá entre comillas, lo que no es una sintaxis válida.

Las opciones son:

  • DEFAULT CURRENT_TIMESTAMP - Si el campo es un campo de marca se puede declarar que tenga un valor predeterminado de la hora actual como este. Esto no funciona para los campos DATETIME.
  • Use Perl - $now = time2str('%Y-%m-%d %T', time);
+0

Tienes que estar bromeando ... Trabajar la cadena de fecha por ti mismo no requiere que cambies de idioma. Lo primero que debe tener en cuenta es 'use Date :: Format; $ now = time2str ('% Y-% m-% d% T', time); ', pero probablemente haya una manera más rápida/más fácil de hacerlo que he olvidado. –

+0

@Dave: Ah, sabes que de alguna manera me perdí por completo que esta era una pregunta de Perl, y no una pregunta de PHP. La sintaxis es muy similar. Actualizaré mi pregunta para que coincida con su sugerencia. Gracias. – hobodave

2

Se puede utilizar la siguiente codificación también.

$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute; 
Cuestiones relacionadas