Обновление таблицы с помощью формы с использованием PHP в MS SQL - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь обновить строку в базе данных SQL Azure.То, что я пытаюсь сделать, это обновить строку с некоторыми входными переменными вместе со свежей отметкой даты.Если я введу следующее (в целях тестирования), моя база данных будет обновлена, но дата будет отсутствовать:

"UPDATE TABLENAME set COL1 = ".$_POST[VAL1].", COL2 = ".$_POST[VAL2].", COL3 = 2020-03-20 WHERE COL0 = 'VAL0'"

, предоставив мне метку даты, похожую на эту: 1905-06-21T00: 00: 00.0000000 IЯ пробовал около сотни способов форматирования переменной date(), добавив ее в мой оператор SQL следующим образом:

"UPDATE TABLENAME set COL1 = ".$_POST[VAL1].", COL2 = ".$_POST[VAL2].", COL3 = ".date()." WHERE COL0 = 'VAL0'"

Само собой разумеется, COL3 - это мой столбец с датой.Но я не могу заставить базу данных принять мое форматирование даты.Я пробовал YYYY-mm-dd xyz1234 в бесчисленных вариантах внутри date(), но безрезультатно.База данных имеет следующий набор параметров сортировки: SQL_Latin1_General_CP1_CI_AS.Есть указатели?

1 Ответ

1 голос
/ 22 марта 2019

Во-первых, о вашем неверном значении даты.Это правильно, потому что когда вы пропускаете '' вокруг 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'])."' ";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...