2013-01-23 104 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);