2011-05-20 3 views
39

nel mio database MySQL, ho una tabella con strutturaCome inserire il timestamp corrente in database MySQL utilizzando un inserto PHP interrogazione

username - varchar 
insert_time - timestamp 

Questa tabella è stato creato in MySQL usando lo strumento phpMyAdmin e per la colonna insert_time , Ho citato il valore predefinito come 0000-00-00 00:00:00.

Ora il problema è che devo aggiornare questo valore predefinito con il timestamp corrente in seguito, utilizzando uno script PHP.

ho provato a fare il seguente codice PHP:

$update_query = 'UPDATE db.tablename SET insert_time=now() '. 
       'WHERE username='.$somename; 

Quando lo script PHP viene eseguito, fallisce, e non è in grado di inserire altri oggetti nel database.

Cosa sto sbagliando?

+0

ho impostato un errore personalizzato da visualizzare se la query di inserimento non riesce (utilizzando un "o die()" nella query) –

risposta

50

Che messaggio di errore state ottenendo?

Immagino che il tuo errore sia dovuto al fatto che la tua variabile php non è racchiusa tra virgolette. Prova questo

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'"; 
+4

sì! quello era il problema. Immagino che dovrei dormire ora. è a tarda notte qui, IST. altrimenti questi problemi si insinueranno in tutto il codice !! –

+2

NOW() è ridondante, utilizzare UNIX_TIMESTAMP() –

+0

@NitinBansal, è possibile fornire un collegamento MySQL dove viene dichiarato obsoleto? Non riesco a trovare alcuna prova per la tua richiesta. –

7

Hai dimenticato di inserire la variabile nell'istruzione sql senza virgolette.

$update_query = 
     "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'"; 
13

L'utilizzo di now() è corretto. Tuttavia, è necessario utilizzare un tipo di virgolette per l'intera query e un altro attorno ai valori.

È possibile modificare la query per usare le virgolette all'inizio e alla fine, e apici intorno $somename:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'"; 
+3

Questo è la soluzione, ma dovresti SEMPRE evitare le variabili prima di inserirle nelle query del database. Controlla PDO http://php.net/pdo come livello di astrazione del database che può essere d'aiuto con questo, o almeno esegui mysql_real_escape_string ($ somename) prima di inserirlo. – mjec

+0

@mjec: sei corretto, ma l'ho lasciato fuori per evitare confusione. L'OP potrebbe essere in grado di sfuggire l'input prima della riga in questione, o questo potrebbe non essere affatto l'input dell'utente. –

+0

meglio: UNIX_TIMESTAMP() –

1

Non mi piace nessuna di quelle soluzioni.

questo è come lo faccio:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" 
      . sqlEsc($somename) . "' ;"; 

allora io uso il mio propria funzione sqlEsc:

function sqlEsc($val) 
{ 
    global $mysqli; 
    return mysqli_real_escape_string($mysqli, $val); 
} 
4

Questo formato viene utilizzato per ottenere timestamp corrente e conservato in mysql

$date = date("Y-m-d H:i:s"); 

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'";