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)";