9

この問題の解決策は、私の簡単な見落としかもしれません。

PHP に文字列として保存されている MYSQL クエリを実行しようとしています。Navicat などの DBM ツールを使用するとクエリは正常に実行されますが、私の PHP 開発環境では false が返されます。私が見過ごしたことはありますか?

SET @running_sum = 0;

SELECT
    TID,
    SumTotal,
    T.`Freight`,
    T.`Insurance`,
    T.`Discount`,
    CONCAT(
        '$',
        FORMAT(
            @running_sum :=@running_sum + SumTotal + T.`Freight` + T.`Insurance` - T.`Discount`,
            2
        )
    ) AS 'Running Total'
FROM
    (
        SELECT
            TID,
            SUM(Quantity * UnitNetValue) AS SumTotal,
            T.`Freight`,
            T.`Insurance`,
            T.`Discount`
        FROM
            Transactions T
        JOIN `Transactions_Products` P ON T.TransactionID = P.TID
        WHERE
            (
                T.TemplateName = ''
                OR T.TemplateName IS NULL
            )
        AND T. STATUS = 1
        GROUP BY
            TransactionID

    ) AS T;

このようにクエリを実行しています。

$result = mysql_query($this->query);

$this->query上に表示されているように、上記のクエリを保持する文字列です。

4

3 に答える 3

20

問題はmysql_query()、複数のクエリをサポートしていないことです。あなたSET @running_sum = 0;は別のクエリと見なされるため、最初にそれを実行する必要があります。

$result1 = mysql_query("SET @running_sum = 0;");

$result2 = mysql_query($this->query); // <-- without the SET ... query

マニュアルから:

mysql_query() は一意のクエリを送信します (複数のクエリはサポートされていません)


補足:mysql_*ライブラリは非推奨です。PDOMySQLiなどの最新の MySQL ライブラリにアップグレードすることをお勧めします。

于 2013-01-23T18:51:02.200 に答える
4

MySQLi のmulti_query代わりにメソッドを使用することも可能です:query

$query = "SET @running_sum = 0; SELECT ...";
$db_link->multi_query($query);
于 2015-11-23T09:24:03.863 に答える
2

このように変数を入れます。私はそれが動作するはずだと思います。

 mysql_query("SELECT @i:=0");
 mysql_query("UPDATE table_name SET id = @i:=@i+1");
于 2013-01-23T18:47:27.650 に答える