Ошибка при попытке вставить дату в столбец datetime - PullRequest
2 голосов
/ 28 октября 2009

У меня есть форма, которая пытается вставить некоторые данные в базу данных 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 в столбец «создан», таблица «dbo.users»; столбец не допускает пустых значений. Вставить не удается.

Мы сделали echo $ q, чтобы показать, что данные пытаются вставить, и он показывает правильное время (например, 2009-10-28 15: 43: 00.000), .000 обычно добавляется БД.

Если я вручную создаю запись в базе данных, дата и время в приведенном выше примере принимаются.

Хотите знать, сталкивался ли кто-нибудь с этой проблемой раньше?

Спасибо. Neil

Ответы [ 4 ]

1 голос
/ 26 августа 2011

У меня была такая же проблема, возможно, это решение будет полезно: проверьте, что у вас есть yyyy-DD-mm формат даты (не yyyy-mm-DD), потому что по умолчанию mssql принимает дату в yyyy-DD-mm формате.

1 голос
/ 28 октября 2009

Попробуйте 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)";
1 голос
/ 28 октября 2009
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 голосов
/ 28 октября 2009

Сервер MSSQL имеет функцию 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)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...