Во-первых, о вашем неверном значении даты.Это правильно, потому что когда вы пропускаете ''
вокруг 2020-03-20
, SQL Server делает неявное преобразование типа данных .Следующий пример демонстрирует это:
Неявное преобразование:
DECLARE @date datetime
SELECT @date = 2020-03-20
SELECT @date
SELECT DATEADD(day, 2020-03-20, 0)
Вывод:
1905-06-21 00:00:00.000
Во-вторых, если вы хотите передать значения даты и времени, просто используйте соответствующий формат- 'yyyy-MM-dd'
, 'yyyyMMdd hh:nn:ss'
или 'yyyy-MM-ddThh:nn:ss'
:
"UPDATE TABLENAME set COL1 = ".$_POST[VAL1].", COL2 = ".$_POST[VAL2].", COL3 = '2020-03-20' WHERE COL0 = 'VAL0'"
Я не знаю, как вы подключаетесь к SQL Server, но попробуйте использовать подготовленные операторы .
Обновление (Извлечение и отправка значений даты и времени с и на SQL Server):
В зависимости от драйвера, который вы используете для подключения к SQL Server, вы можете получить дату изначения времени в виде текста или в виде объекта даты / времени PHP (если вы используете драйвер PHP для SQL Server), но вам необходимо отправить эти значения в виде текста.В вашем случае значения возвращаются в виде текста.Поэтому вам нужно сгенерировать универсальное значение даты и времени (например, 'yyyy-MM-ddThh:nn:ss'
) в виде текста.
В следующем примере показаны некоторые допустимые и недействительные комбинации для оператора UPDATE
T-SQL для столбца datetime.Протестировано с драйвером PHP для SQL Server 4.0.3.
<?php
# Value from database as text
$row['COL3'] = '2019-03-29T11:35:30.0000000';
# Valid statement
$tsql = "UPDATE TABLENAME SET COL3 = '".substr($row['COL3'], 0, 19)."' ";
# Valid statement - date("Y-m-d\Th:i:s") will return current datetime
$tsql = "UPDATE TABLENAME SET COL3 = '".date("Y-m-d\Th:i:s")."' ";
# Invalid statement - date("d-m-Y h:i:s", $row['COL3']) expects int as second parameter,
# generates warning and returns '01-01-1970 12:33:39' as result
$tsql = "UPDATE TABLENAME SET COL3 = '".date("d-m-Y h:i:s", $row['COL3'])."' ";
?>