Поле COUNT неверно или синтаксическая ошибка

Какая ошибка, когда я получу следующее сообщение об ошибке

Неустранимая ошибка: исключить исключение «PDOException» с сообщением «SQLSTATE [07002]: [Microsoft] [драйвер ODBC 11 для SQL Server] Поле COUNT неверно или синтаксическая ошибка« …

Это запрос, который я использую

$sql = $pdo->prepare("SELECT stockamount, stockname, stockbalance.stockid, SUM(ABS(reservationtransaction.stockquantity)) AS reservedamount FROM stockbalance JOIN stock ON stockbalance.stockid = stock.stockid LEFT JOIN reservationtransaction ON reservationtransaction.articleid = :artid WHERE stockbalance.articleid = :artid AND ((changeddate > DATEADD(yy,-1,GETDATE()) AND inventorydate > DATEADD(yy,-1,GETDATE())) OR stockbalance.stockamount <> 0) GROUP BY stockbalance.stockid"); $sql->bindValue(':artid', $productId); $sql->execute(); 

Я искал вопросы в SO, но никто не был подобным или полезным.
Заранее спасибо.

Изменить: этот запрос работает нормально при выполнении его с помощью Microsoft SQL Server Management Studio, но при использовании PDO я получаю сообщение об ошибке.

Количество параметров, указанных в SQLBindParameter, было меньше количества параметров в инструкции SQL, содержащихся в * StatementText. SQLBindParameter вызывается с параметром ParameterValuePtr, установленным на нулевой указатель, StrLen_or_IndPtr не установлен в SQL_NULL_DATA или SQL_DATA_AT_EXEC, а InputOutputType не установлен в SQL_PARAM_OUTPUT, поэтому количество параметров, указанных в SQLBindParameter, больше, чем количество параметров в инструкции SQL, содержащихся в * StatementText , Функция SQLExecute

заполнители должны иметь уникальные имена, даже если они имеют одинаковое значение

 $sql = $pdo->prepare("SELECT stockamount, stockname, stockbalance.stockid, SUM(ABS(reservationtransaction.stockquantity)) AS reservedamount FROM stockbalance JOIN stock ON stockbalance.stockid = stock.stockid LEFT JOIN reservationtransaction ON reservationtransaction.articleid = :artid WHERE stockbalance.articleid = :artid2 AND ((changeddate > DATEADD(yy,-1,GETDATE()) AND inventorydate > DATEADD(yy,-1,GETDATE())) OR stockbalance.stockamount <> 0) GROUP BY stockbalance.stockid"); $sql->bindValue(':artid', $productId); $sql->bindValue(':artid2', $productId); $sql->execute(); 

Все столбцы, не входящие в какую-либо арифметическую функцию, должны находиться в предложении GROUP BY . Смотри ниже:

 SELECT stockamount, stockname, stockbalance.stockid, Sum(Abs(reservationtransaction.stockquantity)) AS reservedamount FROM stockbalance INNER JOIN stock ON stockbalance.stockid = stock.stockid LEFT JOIN reservationtransaction ON reservationtransaction.articleid = :artid WHERE stockbalance.articleid = :artid AND ( ( changeddate > Dateadd(yy, -1, Getdate()) AND inventorydate > Dateadd(yy, -1, Getdate()) ) OR stockbalance.stockamount <> 0 ) GROUP BY stockamount, stockname, stockbalance.stockid 
  • Как заставить Laravel использовать мой класс вместо собственного PDO?
  • Laravel 5.3, CentOS, PHP 7 - Как подключить MSSQL?
  • PDO вставляет в MSSQL даты и время обмена день и месяц
  • Interesting Posts
    Давайте будем гением компьютера.