2009-10-28 7 views
2

J'ai un formulaire qui tente d'insérer des données dans une base de données SQL Server 2008. Le formulaire a une fonction pour obtenir la date/heure actuelle, puis l'insérer dans la base de données comme suit; Cependant, lorsque le formulaire l'envoie, il signale une erreur de ;,Erreur lors de la tentative d'insertion de la date dans la colonne datetime

Avertissement: mssql_query() [fonction.mssql-query]: message: Impossible d'insérer 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 les données 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 enregistrement dans la base de données, le datetime dans l'exemple ci-dessus est accepté.

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

Merci. Neil

+0

Pour l'amour du ciel, nous avons paramétré les requêtes –

Répondre

1

Essayez CURRENT_TIMESTAMP au lieu de '$ maintenant' 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)"; 
+0

Merci, CURRENT_TIMESTAMP fonctionne parfaitement. C'est bizarre comment cela fonctionnait quand nous utilisions un serveur sql différent (bien qu'utilisant la même version et la même base de données). – doubleplusgood

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

MISE À JOUR

oh son serveur sql

probablement vous utiliseriez 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 rend la date alongwith temps.

+0

+1 C'est une bonne idée. – Bobby

+0

Pour le champ datetime? : S – doubleplusgood

0

MSSQL serveur a la fonction GETDATE() pour datetime en cours, alors essayez:

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

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.

Questions connexes