我有一个表单试图将一些数据插入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添加。< / p>
如果我在数据库中手动创建记录,则接受上述示例中的日期时间。
想知道以前是否有人遇到过这个问题?
谢谢。 尼尔
答案 0 :(得分: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)";
更新
哦,它的sql server
可能你会使用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给出了时间和时间。
答案 1 :(得分:1)
尝试使用CURRENT_TIMESTAMP代替'$ now',如下所示:
$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)";
答案 2 :(得分:1)
我遇到了同样的问题,这个解决方案可能会有所帮助:检查您是否有yyyy-DD-mm
日期格式(不是yyyy-mm-DD
),因为默认情况下,mssql接受yyyy-DD-mm
中的日期格式。
答案 3 :(得分: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)";