Уф! Я нашел ответ!
По какой-то причине в доктрине не используются подготовленные операторы PDO для SQL-сервера. Connection / Mssql.php подставляет любые параметры в строке запроса и передает пустой массив в Connection :: execute. Это было бы хорошо:
- Если подготовленные операторы не работали (возможно, они не работали в SQL 2000, когда драйвер соединения был впервые написан?): /
- Если подстановка действительно успешно подставила более одного значения! : О
Исправить несложно:
в файле Connection / Mssql.php в строке 314 измените функцию выполнения ниже:
public function execute($query, array $params = array())
{
if(! empty($params)) {
$query = $this->replaceBoundParamsWithInlineValuesInQuery($query, $params);
}
return parent::execute($query, array());
}
до:
public function execute($query, array $params = array())
{
return parent::execute($query, $params);
}
Вы можете также легко удалить переопределенную функцию.
Не забудьте внести те же изменения в exec, который появляется чуть ниже функции execute в том же файле кода.
Кроме того, вы можете проверить это, прежде чем использовать его с версиями сервера SQL ранее 2005 года, поскольку я не тестировал это решение с этой версией.