4

SQLで同じパラメータを使用しようとしていますが、最初のものしか認識していません。私のコードを見てください:

$stmt = $dbh->prepare("SELECT
    (SELECT SUM(oq.value)
    FROM operations_quotas AS oq
        JOIN operations AS o ON oq.operation = o.id
    WHERE o.user = :user AND o.type = 1 AND oq.status = 1
    ) AS total_incomes_open,

    (SELECT SUM(oq.value)
    FROM operations_quotas AS oq
        JOIN operations AS o ON oq.operation = o.id
    WHERE o.user = :user AND o.type = 1 AND oq.status = 2
    ) AS total_incomes_wroteoff");

$stmt->bindParam(":user", $this->getId());
$stmt->execute();

それは可能ですか?

4

1 に答える 1

5

そのようなパラメータを再利用することはできません。一意のパラメーターを作成する必要があります。

$stmt = $dbh->prepare("SELECT
    (SELECT SUM(oq.value)
    FROM operations_quotas AS oq
        JOIN operations AS o ON oq.operation = o.id
    WHERE o.user = :user_a AND o.type = 1 AND oq.status = 1
    ) AS total_incomes_open,

    (SELECT COUNT(oq.id)
    FROM operations_quotas AS oq
        JOIN operations AS o ON oq.operation = o.id
    WHERE o.user = :user_b AND o.type = 1 AND oq.status = 2
    ) AS total_incomes_wroteoff");

$stmt->bindParam(":user_a", $this->getId());
$stmt->bindParam(":user_b", $this->getId());
$stmt->execute();

マニュアルから:

PDOStatement::execute() を呼び出すときに、ステートメントに渡す値ごとに一意のパラメーター マーカーを含める必要があります。準備済みステートメントで、同じ名前の名前付きパラメーター マーカーを 2 回使用することはできません。SQL ステートメントの IN() 節などで、複数の値を 1 つの名前付きパラメーターにバインドすることはできません。

于 2012-11-27T14:14:56.853 に答える