2009-10-28 103 views
2

我有一個嘗試將某些數據插入SQL Server 2008數據庫的表單。該表單具有獲取當前日期/時間的功能,然後將其插入到數據庫中,如下所示;嘗試向日期時間列中插入日期時出錯

$now = date("Y-m-d 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)"; 

但是,當表單提交時報告錯誤;

警告:mssql_query()[function.mssql-query]:message:無法將值NULL插入到'created'列中,表'dbo.users';列不允許有空值。 INSERT失敗。

我們完成了一個echo $ q來顯示試圖插入的數據,它確實顯示了正確的日期時間(例如2009-10-28 15:43:00.000),.000通常被db添加。

如果我在數據庫中手動創建一條記錄,則上述示例中的日期時間將被接受。

想知道有沒有人遇到過這個問題?

謝謝。 尼爾

+0

看在老天的份上,我們參數化查詢 – 2009-10-28 16:04:14

回答

1

嘗試CURRENT_TIMESTAMP,而不是 '$現在',像這樣:

$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

謝謝你,CURRENT_TIMESTAMP完美運作。當我們使用不同的sql服務器時(雖然使用相同的版本和完全相同的數據庫),它的工作原理很奇怪。 – doubleplusgood 2009-10-28 16:07:01

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

UPDATE

哦它的SQL服務器

也許你會使用CURRENT_TIMESTAMP然後

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 

你可以看到,CURRENT_TIMESTAMP還給日期非常久遠的時間。

+0

+1這是個好主意。 – Bobby 2009-10-28 15:57:05

+0

對於日期時間字段? :S – doubleplusgood 2009-10-28 15:57:47

0

MSSQL Server有GETDATE()當前日期時間函數,所以嘗試:

$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

我有同樣的問題,可能此解決方案將有所幫助:請檢查您的日期格式爲yyyy-DD-mm(而不是yyyy-mm-DD),因爲默認情況下,mssql接受日期格式爲yyyy-DD-mm