Я пытаюсь обновить поле DATETIME на моем сервере MSSQL (2012) со следующим кодом PHP:
$currentDate = date('Y-m-d H:i:s');
$query = " UPDATE Members
SET lastNotificationCheck = '?'
WHERE memberID=?;";
$stmt = sqlsrv_prepare($this->con, $query, array(&$currentDate, &$_SESSION['member_id']));
$execute = sqlsrv_execute($stmt);
if ($execute === false) {
die( print_r( sqlsrv_errors(), true));
return false;
} else {
return true;
}
Приведенное выше возвращает следующую ошибку:
Array ( [0] => Array ( [0] => 22018 [SQLSTATE] => 22018 [1] => 245 [code] => 245 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the varchar value '2014-11-10 11:30:35' to data type int. [message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting the varchar value '2014-11-10 11:30:35' to data type int. ) )
Странная вещь (я думаю) заключается в том, что следующий запрос отлично работает в SQL Server Management Studio:
UPDATE Members
SET lastNotificationCheck = '2014-11-10 11:18:00'
WHERE memberID=1000004;
enter code here
Я попытался сгенерировать дату несколькими способами (date() и new DateTime()), но запрос всегда терпит неудачу при выполнении через PHP.
Таблица участников:
CREATE TABLE [dbo].[Members](
[memberID] [int] IDENTITY(1,1) NOT NULL,
[membername] [varchar](20) NOT NULL,
[email] [varchar](50) NOT NULL,
[password] [varchar](50) NOT NULL,
[joindate] [datetime] NOT NULL,
[lastlogin] [datetime] NULL,
[lastNotificationCheck] [datetime] NULL
Надеюсь, кто-то может понять, что может быть неправильным.
Удалите кавычки в '?', Они будут добавлены автоматически, если это значение является строкой. Если вы добавите их, результат будет ''value''
.
$query = " UPDATE Members
SET lastNotificationCheck = ?
WHERE memberID=?;";
$stmt = sqlsrv_prepare($this->con, $query, array(&$currentDate, &$_SESSION['member_id']));
SET lastNotificationCheck=NOW()
.