如何在PHP函数中声明查询中的变量

如何在PHP函数中声明查询中的变量,php,mysql,variables,Php,Mysql,Variables,我为这个问题挣扎了几天。 我想这很简单,但我看不出我做错了什么 我使用的是一个“functions.php”文件,其中保存了所有查询,每个查询都保存在自己的php函数中,类似于: $query =' SELECT * FROM Table '; $query =' SET @myvar := 0 SELECT ID, @myvar := @myvar + SomeRow AS Result FROM Table '; 我现在希望能够在查询中使用变量,并

我为这个问题挣扎了几天。 我想这很简单,但我看不出我做错了什么

我使用的是一个“functions.php”文件,其中保存了所有查询,每个查询都保存在自己的php函数中,类似于:

$query ='
    SELECT *
    FROM Table
';
$query ='
    SET @myvar := 0
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table
';
我现在希望能够在查询中使用变量,并在查询中声明它们。比如:

$query ='
    SELECT *
    FROM Table
';
$query ='
    SET @myvar := 0
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table
';
我一直在谷歌上搜索,找到了很多解决方案,但都没能奏效。。。我肯定错过了什么

欢迎任何建议

谢谢你,这是两个问题。所以你必须把它分开

$query ='
    SET @myvar := 0;
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table;
';
或者你是这样开始的

$query ='
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table, (SELECT @myvar := 0) AS init
';
样本

MariaDB [test]> select id, order_ID from orders limit 10;
+-----+----------+
| id  | order_ID |
+-----+----------+
| 632 |      111 |
| 633 |      111 |
| 634 |      111 |
| 635 |      112 |
| 636 |      113 |
| 637 |      113 |
| 638 |      113 |
| 639 |      113 |
| 640 |      113 |
| 641 |      113 |
+-----+----------+
10 rows in set (0.00 sec)

MariaDB [test]> SELECT id, @myvar := @myvar + order_ID
    -> FROM orders, (SELECT @myvar := 0) AS init LIMIT 10;
+-----+-----------------------------+
| id  | @myvar := @myvar + order_ID |
+-----+-----------------------------+
| 632 |                         111 |
| 633 |                         222 |
| 634 |                         333 |
| 635 |                         445 |
| 636 |                         558 |
| 637 |                         671 |
| 638 |                         784 |
| 639 |                         897 |
| 640 |                        1010 |
| 641 |                        1123 |
+-----+-----------------------------+
10 rows in set (0.00 sec)
这是两个问题。所以你必须把它分开

$query ='
    SET @myvar := 0;
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table;
';
或者你是这样开始的

$query ='
    SELECT ID, @myvar := @myvar + SomeRow AS Result
    FROM Table, (SELECT @myvar := 0) AS init
';
样本

MariaDB [test]> select id, order_ID from orders limit 10;
+-----+----------+
| id  | order_ID |
+-----+----------+
| 632 |      111 |
| 633 |      111 |
| 634 |      111 |
| 635 |      112 |
| 636 |      113 |
| 637 |      113 |
| 638 |      113 |
| 639 |      113 |
| 640 |      113 |
| 641 |      113 |
+-----+----------+
10 rows in set (0.00 sec)

MariaDB [test]> SELECT id, @myvar := @myvar + order_ID
    -> FROM orders, (SELECT @myvar := 0) AS init LIMIT 10;
+-----+-----------------------------+
| id  | @myvar := @myvar + order_ID |
+-----+-----------------------------+
| 632 |                         111 |
| 633 |                         222 |
| 634 |                         333 |
| 635 |                         445 |
| 636 |                         558 |
| 637 |                         671 |
| 638 |                         784 |
| 639 |                         897 |
| 640 |                        1010 |
| 641 |                        1123 |
+-----+-----------------------------+
10 rows in set (0.00 sec)


我不确定你到底想达到什么目的。你能向我们解释一下吗?我的目标是能够构建一个查询,将当前行的值与前一行的值相加,因此如果我有一行的值(1,2,3,4),结果应该是(1,3,6,10)。你需要提供更多信息/更好的解释。只是猜测一下,但您的问题要么是函数内部的问题,要么是尝试在
$query
中执行2个查询,而
mysqli\u multi\u query()
以外的所有函数都只执行1个查询语句。如果我可以直接在mySQL中使用变量,我错了吗?我不是在说PHP变量(比如$myvar),而是在我的查询中内置的实际mySQL变量。我不确定您真正想要实现什么。你能向我们解释一下吗?我的目标是能够构建一个查询,将当前行的值与前一行的值相加,因此如果我有一行的值(1,2,3,4),结果应该是(1,3,6,10)。你需要提供更多信息/更好的解释。只是猜测一下,但您的问题要么是函数内部的问题,要么是尝试在
$query
中执行2个查询,而
mysqli\u multi\u query()
以外的所有函数都只执行1个查询语句。如果我可以直接在mySQL中使用变量,我错了吗?我不是在说PHP变量(比如$myvar),而是在我的查询中内置的实际mySQL变量。只是尝试了两个查询。1度的那个不行。2º的工作方式很有魅力。我知道你做了什么。。。简单而干净。。。应该考虑一下;)@维森特·查扎德——我也尝试过这两种方法,效果很好。如果“SomeRow”不是数字?@Vicente Chazard-出于某种原因,如果我在“选择我的查询”中断之前使用集合,那么我在回答中添加了一个示例。如果您使用的是mysql而不是mysqli,则在一次调用中只能执行一个查询。请尝试两个查询。1度的那个不行。2º的工作方式很有魅力。我知道你做了什么。。。简单而干净。。。应该考虑一下;)@维森特·查扎德——我也尝试过这两种方法,效果很好。如果“SomeRow”不是数字?@Vicente Chazard-出于某种原因,如果我在“选择我的查询”中断之前使用集合,那么我在回答中添加了一个示例。如果您使用mysql而不是mysqli,则在一次调用中只能执行一个查询