Я пытаюсь преобразовать некоторый код, чтобы использовать PHP odbc_prepare и odbc_execute для вставки данных в таблицу SQL Server, используя параметры для безопасности, но я не могу получить прошлые ошибки из-за способа, которым PHP обрабатывает одинарные кавычки в параметрах и SQLПотребность сервера в одинарных кавычках вокруг текста для приведения к дате и времени.
У меня есть веб-форма, которая принимает дату и время от пользователя среди других данных.
Вывод из поля ввода даты и времени (ниже)в формате YY-MM-DDTHH: MM: SS (например, 2019-10-09T10: 14: 00)
Вот мой код (сокращен для этого поста, да, я очищаю данные поста в своем реальном коде):
$missdt = $_POST["missdt"]; // results in 2019-10-09T10:14:00 stored as datetime in SQL Server
$branch = intval($_POST["branch"]); // stored as integer in SQL Server
$name = $_POST["name"]; // stored as varchar in SQL Server
$params = array($branch,
$missdt, // results in SQL error “Invalid character value for cast specification”
$name, );
$sql = "insert into my_table (branch, submitted, miss_date, name)
values (?, getdate(), ?, ?) ";
$res = odbc_prepare($conn, $sql);
$stmt = odbc_execute($res, $params);
Проблема в том, что параметр $ missdt приводит к ошибке SQL «Недопустимое значение символа для спецификации приведения»
Я пробовал следующие варианты для $ missdt вмассив $ params и получил указанные ошибки:
"'". $ missdt. "'", // (добавлены кавычки) Ошибка PHP не может открыть файл
"'". $ missdt. "'", // (добавлены кавычки и пробелы) Ошибка PHP не может открыть файл
"'". $ missdt. "'", // (пробел после) Ошибка SQL Недопустимое символьное значение для спецификации приведения
' "'. $ missdt.'" ', // (двойные кавычки используются с отключенным параметром quoted_identifier) приводит к «недопустимому»номер параметра »&« odbc_execute () ожидает, что параметр 1 будет ресурсом »
Этот вариант запроса SQL работает нормально, но его можно использовать неправильно:
$ sql =" вставить в my_table (branch,submit, miss_date, name) значения (?, getdate (), '$ missdt',?) ";
Согласно документации PHP, использование одинарных кавычек до и после параметра приводит к тому, что параметр обрабатывается какимя файла и обходной путь - добавить пробел в начало или конец параметра. Из вариантов, которые я пробовал выше, видно, что в данном случае это не работает. Я думаю, это потому, что SQL Server нужны кавычки, чтобы привести символьные данные к дате.
Любые идеи о том, как обойти это?
Я использую PHP 7.1, SQL Server2014 и Apache в Windows 2012