Ошибка при привязке параметра даты к подготовленному оператору — использование PHP PDO/ODBC с SQL Server

У меня есть соединение 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...

5
задан Will Koper 27 June 2012 в 17:16
поделиться