2013-01-23 36 views
6

Giải pháp cho vấn đề này có thể đơn giản hơn tầm nhìn của tôi.Biến MYSQL trong truy vấn php

Tôi đang cố chạy truy vấn MYSQL được lưu trữ dưới dạng chuỗi trong PHP. Truy vấn chạy tốt bằng cách sử dụng công cụ DBM như Navicat nhưng trả về false trong môi trường phát triển PHP của tôi. Có cái gì tôi đã nhìn qua?

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; 

Tôi đang thực hiện truy vấn như thế này;

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

$this->query là một chuỗi chứa truy vấn trên, như được hiển thị cho bạn ở trên.

Trả lời

16

Vấn đề là mysql_query() không hỗ trợ nhiều truy vấn. SET @running_sum = 0; của bạn được coi là một truy vấn riêng biệt và do đó bạn sẽ phải thực hiện điều đó đầu tiên:

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

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

Từ Manual:

mysql_query() sẽ gửi một truy vấn duy nhất (nhiều truy vấn không được hỗ trợ)


Side lưu ý: thư viện mysql_* bị phản đối, nó được khuyến khích để nâng cấp lên một MySQ hiện đại Thư viện L như PDO hoặc MySQLi.

+0

Cảm ơn bạn đã giúp đỡ MrCode. Nó được nhiều đánh giá cao. Tôi sẽ cập nhật mã của mình để tính đến điều này. –

+0

Cũng xin lưu ý xem xét bảo mật khi sử dụng mysqli_multi_query() để gửi nhiều truy vấn cùng một lúc. Với mysqli_multi_query() bạn mở chính mình cho các truy vấn được tiêm như "; DROP DATABASE". http://php.net/manual/en/mysqli.quickstart.multiple-statement.php – Paul

2

đặt biến số như thế này. tôi đoán nó sẽ hoạt động.

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

Tôi xin lỗi, tôi không nhận định nó. Tôi đã xóa nhận xét của mình. Xóa của bạn quá và chúng tôi có thể giả vờ tôi không bao giờ nói bất cứ điều gì. Lấy làm tiếc. – Ariel

2

Ngoài ra còn có thể sử dụng phương pháp multi_query thay vì query của MySQLi:

$query = "SET @running_sum = 0; SELECT ..."; 
$db_link->multi_query($query); 
Các vấn đề liên quan