2015-12-04 34 views
8

SAYISI alan yanlış veya sözdizimi hatası

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[07002]: [Microsoft][ODBC Driver 11 for SQL Server]COUNT field incorrect or syntax error'...

Bu, ben SO soruları aramış

$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(); 

kullanıyorum sorgu ancak Hiç kimse benzer ya da yardımcı olmamıştır.
Önceden teşekkürler.

Düzeltme: Bu sorguyu, Microsoft SQL Server Management Studio'yu çalıştırırken iyi çalışıyor, ancak PDO'yu kullanırken hata alıyorum.

+0

Sizin 'stockamount' ve' stockname' 'GRUP BY' parçası değildir size nedenle onları 'MIN' gibi bir toplu yöntem olmadan seçemezsiniz. –

+1

Sanırım MySQL arka planınız var: http: //stackoverflow.com/questions/33629168/group-by-clause-in-mysql-and-postgresql-why-the-error-in-postgresql/33629201#33629201. Asıl nokta, MySQL toplama davranışının ANSI şikayetidir. – lad2025

+0

Hata iletisine göre, bu bir SQL Exception değil, bir PDOException. Sonuç kümesinde bir uyumsuzluk ve onu bağlamaya çalıştığınız nesne olabilir mi? –

cevap

15

The number of parameters specified in SQLBindParameter was less than the number of parameters in the SQL statement contained in *StatementText. SQLBindParameter was called with ParameterValuePtr set to a null pointer, StrLen_or_IndPtr not set to SQL_NULL_DATA or SQL_DATA_AT_EXEC, and InputOutputType not set to SQL_PARAM_OUTPUT, so that the number of parameters specified in SQLBindParameter was greater than the number of parameters in the SQL statement contained in *StatementText. SQLExecute Function

tutucuları onlar aynı değere sahip olsa bile benzersiz adlara sahip olmalıdır

$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(); 
+0

Sorun buydu! Cevabınız için teşekkürler. – lingo

1

Herhangi bir aritmetik işlevde olmayan tüm sütunlar GROUP BY maddesinde olmalıdır. aşağıya bakınız:

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 
+1

Tamam, bunu denedim ama işe yaramıyor. Hata alıyorum SQLSTATE [07002]: [Microsoft] [SQL Server için ODBC sürücüsü 11] COUNT alanı yanlış veya sözdizimi hatası '. – lingo