Erreur lors de la tentative d'insertion de la date dans la colonne datetime

J'ai un formulaire qui essaie d'insert des données dans une database SQL Server 2008. Le formulaire a une fonction pour get la date / heure actuelle, puis l'insert dans la database comme suit;

$now = date("Ymd H:i:s"); $q = "INSERT INTO ".TBL_USERS." ( username, password, userid, userlevel, email, created, updated, timestamp, fullname, avatar ) VALUES ( '$username', '$password', '0', $ulevel, '$email', '$now', '$now', $time, '$fullname', $avatar)"; 

Cependant, lorsque le formulaire le soumet, il signale une erreur de;

Attention: mssql_query () [fonction.mssql-query]: message: Impossible d'insert la valeur NULL dans la colonne 'created', table 'dbo.users'; La colonne n'autorise pas les valeurs NULL. INSERT échoue.

Nous avons fait un echo $ q pour montrer datatables essayant d'être insérées et il montre le datetime correct (par exemple 2009-10-28 15: 43: 00.000), le .000 est ajouté par le db normalement.

Si je crée manuellement un logging dans la database, le datetime dans l'exemple ci-dessus est accepté.

Je me demandais si quelqu'un avait déjà rencontré ce problème?

Je vous remercie. Neil

Essayez CURRENT_TIMESTAMP au lieu de '$ now' comme ceci:

 $q = "INSERT INTO ".TBL_USERS." ( username, password, userid, userlevel, email, created, updated, timestamp, fullname, avatar ) VALUES ( '$username', '$password', '0', $ulevel, '$email', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, $time, '$fullname', $avatar)"; 
 Try NOW() if you are trying to add current timestamp. $q = "INSERT INTO ".TBL_USERS." ( username, password, userid, userlevel, email, created, updated, timestamp, fullname, avatar ) VALUES ( '$username', '$password', '0', $ulevel, '$email', NOW(), NOW(), $time, '$fullname', $avatar)"; 

METTRE À JOUR

oh son server sql

probablement vous utiliseriez le CURRENT_TIMESTAMP alors

 SELECT SYSDATETIME() ,SYSDATETIMEOFFSET() ,SYSUTCDATETIME() ,CURRENT_TIMESTAMP ,GETDATE() ,GETUTCDATE(); /* Returned: SYSDATETIME() 2007-04-30 13:10:02.0474381 SYSDATETIMEOFFSET()2007-04-30 13:10:02.0474381 -07:00 SYSUTCDATETIME() 2007-04-30 20:10:02.0474381 CURRENT_TIMESTAMP 2007-04-30 13:10:02.047 GETDATE() 2007-04-30 13:10:02.047 GETUTCDATE() 2007-04-30 20:10:02.047 

vous pouvez voir que current_timestamp renvoie la date avec le time.

J'ai eu le même problème, possible cette solution sera utile: vérifiez que vous avez un format de date yyyy-DD-mm (pas yyyy-mm-DD ), car par défaut, mssql accepte la date au format yyyy-DD-mm .

MSSQL Server possède la fonction GETDATE () pour la date et l'heure actuelles, essayez donc:

 $q = "INSERT INTO ".TBL_USERS." ( username, password, userid, userlevel, email, created, updated, timestamp, fullname, avatar ) VALUES ( '$username', '$password', '0', $ulevel, '$email', GETDATE(), GETDATE(), $time, '$fullname', $avatar)";