У меня есть соединение pdo с ODBC (v2000.86.359.00), подключающееся к базе данных SQL Server (v8.00.2039 SP4 Standard Edition).
Это работает:
$id = 486;
$duedate = 'June 27, 2012';
$query ="INSERT into AssetHistory (AssetID, DateDue) Values($id, $duedate);";
$noParams = $db->exec($query);
$db->query($query);
Но если я попытаюсь использовать подготовленный оператор следующим образом:
$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, :duedate);';
$input = array(':id'=>486, ':duedate'=>'June 27, 2012');
$smt = $db->prepare($sql);
$smt->execute($input);
я получу эту ошибку (от $smt->errorInfo()):
"[Microsoft][ODBC Driver Manager] Function sequence error (SQLExecute[0] at ext\pdo_odbc\odbc_stmt.c:254)"
Я пробовал: 1) Заключить :duedate в одинарные кавычки 2) Дата привязки к целочисленной отметке времени unix 3) Привязка :duedate к объекту php DateTime 4) Вставка только $duedate в оператор sql перед подготовкой
На этом этапе я могу застрять, используя метод $db->query и очищая входные данные, насколько это возможно, но я был бы очень признателен за любые предложения.
Использование PHP 5.38 на компьютере под управлением Windows Server 2003.
Обновления: Я удалил некоторые переменные из предыдущей версии этого вопроса. Сообщение об ошибке изменилось, но конечный результат тот же.
Я также пытался вручную привязать параметры следующим образом:
$smt->bindValue(':id', 486, PDO::PARAM_INT);
$smt->bindValue(':duedate', 'June 27, 2012', PDO::PARAM_STR);
Наряду с добавлением функции преобразования в sql следующим образом:
$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, convert(datetime,:duedate, 100));';
Что возвращает: «Неверное поле COUNT или синтаксическая ошибка»
И я заметил, что SQL Server на самом деле плохо работает с временными метками unix...