1. ホーム
  2. sql-server

[解決済み] COUNTフィールドが正しくないか、構文エラーです。

2022-02-17 07:10:03

質問

次のようなエラーメッセージが表示された場合、どのようなエラーが発生するのでしょうか。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[07002]: [Microsoft][ODBC Driver 11 for 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 を NULL ポインタに設定し、StrLen_or_IndPtr を SQL_NULL_DATA または *StatementText に設定しない状態で呼び出されました。 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();