2013-01-23 106 views
6

這個問題的解決方案可能是一個簡單的我的視線。在php查詢中的MYSQL變量

我想運行存儲爲PHP中的字符串的MYSQL查詢。查詢運行正常,使用像Navicat這樣的DBM工具,但在我的PHP開發環境中返回false。有沒有我看過的東西?

SET @running_sum = 0; 

SELECT 
    TID, 
    SumTotal, 
    T.`Freight`, 
    T.`Insurance`, 
    T.`Discount`, 
    CONCAT(
     '$', 
     FORMAT(
      @running_sum :[email protected]_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是一個字符串,它包含上述查詢,因爲它顯示在上面。

回答

16

問題是mysql_query()不支持多個查詢。你SET @running_sum = 0;被認爲是一個單獨的查詢,因此你必須執行,首先:

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

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

Manual

的mysql_query()發送一個唯一的查詢(多個查詢不支持)


邊注:mysql_*庫已過時,建議升級到現代MySQ L庫,如PDOMySQLi

+0

謝謝你的幫助MrCode。非常感謝。我會更新我的代碼以考慮到這一點。 –

+0

請注意使用mysqli_multi_query()一次發送多個查詢時的安全考慮。 用mysqli_multi_query()打開自己的注入查詢,如「; DROP DATABASE」。 http://php.net/manual/en/mysqli.quickstart.multiple-statement.php – Paul

2

把變量像這樣。我想它應該工作。

mysql_query("SELECT @i:=0"); 
mysql_query("UPDATE table_name SET id = @i:[email protected]+1"); 
+0

對不起,我看錯了。我刪除了我的評論。刪除你的,我們可以假裝我從未說過任何話。抱歉。 – Ariel

2

也有可能使用multi_query方法,而不是庫MySQLi的query

$query = "SET @running_sum = 0; SELECT ..."; 
$db_link->multi_query($query);