2012-07-03 10 views
2

J'ai une table avec un champ:Mise à jour MySQL

'last_modified - timestamp NOT NULL'

  • Je mis la valeur par défaut à l'horodatage en cours. Cependant cela ne fonctionne que lors de la mise à jour ou de l'insertion de phpMyAdmin et non de mon script.

J'ai essayé

$sql = sprintf("UPDATE %s SET timestamp=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']); 

et il ne marche pas encore semblent fonctionner. Comment puis-je mettre à jour l'horodatage lorsque je le mets à jour ou que je l'insère par table à partir d'un script?

également Heres un échantillon de la sortie de scripts:

Mise à jour au sujet de l'horodatage SET = maintenant(), page_header = 'en-tête de la page va ici', sub_header = 'tête Sub va ici', content_short = « Cette est là une brève description de la page a propos va, content = 'C'est là la description complète du contenu va' WHERE id = '1'

+0

faire pas 'timestamp = now()' dans votre requête si vous avez défini sa valeur par défaut sur l'horodatage actuel. – manurajhada

+0

alors supprimez la valeur par défaut et cela devrait fonctionner? – Alex

+1

@juergen c'est un post de Microsoft. pas vraiment la même chose ...? – Alex

Répondre

7

Peut être mal lu, mais votre nom de colonne est last_modified (typé horodatage), de sorte que la requête doit être:

UPDATE about SET last_modified=now(), 
page_header = 'Page header goes here', 
sub_header = 'Sub header goes here', 
content_short = 'This is where a short description of the about page goes', 
content = 'This is where the full content description goes' 
WHERE id='1' 
+0

Je ai essayé d'utiliser maintenant() mais il enregistre seulement la date –

1

si vous utilisez un reserved word comme votre table ou columnname alors vous devez citer

$sql = sprintf("UPDATE %s SET `timestamp`=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']); 

dans ce cas vous utilisé timestamp comme columnname donc vous avez besoin de citer

Pour mettre à jour horodatages vous pouvez automatiquement compter sur MySQL lui-même si vous avez seulement 1 colonne d'horodatage ou vous pouvez ajouter ON UPDATE CURRENT_TIMESTAMP lors de la définition de votre colonne d'horodatage, pour plus d'informations voir TIMESTAMP initialisation

+0

le nom de la colonne est last_modified ... – Alex

+0

MySQL autorise 'TIMESTAMP' comme identifiant sans guillemets. Voir http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html. – eggyal

+0

oui c'est ce que je pensais aussi bien – Alex

0

Si vous souhaitez mettre à jour l'horodatage chaque fois que quelque chose arrive à l'enregistrement (par ex. date et heure de la dernière modification), il est préférable de le laisser pour le DB. Vous ne pouvez pas compter sur la valeur par défaut dans la définition de champ, car cela ne fonctionnera que sur INSERT (lorsque l'enregistrement/champ est créé), utilisez SET last_modified = GETDATE() [ou GETUTCDATE()] les fonctions réelles peuvent différer selon votre serveur SQL réel. Et "Ivan Buttinoni" est absolument correct et personne, y compris moi, ne l'a remarqué avant - votre nom de domaine est faux, mais les commentaires ci-dessus s'appliquent toujours.

0

Si vous avez quelque chose comme cadre qui ne permet pas de « maintenant() » ce domaine - il suffit de faire le terrain à pas (champ modèle->) variable PHP NULL et à null juste avant d'enregistrer ..