我有以下代码(简化,以突出错误):MySQL查询返回PHP空值,但正常工作
SELECT @x := @x + 1 FROM some_table, (SELECT @x := 0) y
它可以在MySQL中,但是当我在PHP中使用它,它打破并返回所有NULL值。我知道它与“@x + 1”部分有关,因为如果我用其他东西替换这个部分,例如'test',它就会起作用。
可能是什么问题?
我有以下代码(简化,以突出错误):MySQL查询返回PHP空值,但正常工作
SELECT @x := @x + 1 FROM some_table, (SELECT @x := 0) y
它可以在MySQL中,但是当我在PHP中使用它,它打破并返回所有NULL值。我知道它与“@x + 1”部分有关,因为如果我用其他东西替换这个部分,例如'test',它就会起作用。
可能是什么问题?
这对我很好(用PHP 5.6.30和MySQL 8.0.0测试)。
$stmt = $pdo->query("SELECT @x := @x + 1 FROM foo, (SELECT @x := 0) y");
print_r($stmt->fetchAll(PDO::FETCH_BOTH));
输出(后我添加三行到我的表foo
):
Array
(
[0] => Array
(
[@x := @x + 1] => 1
[0] => 1
)
[1] => Array
(
[@x := @x + 1] => 2
[0] => 2
)
[2] => Array
(
[@x := @x + 1] => 3
[0] => 3
)
)
注意,关联数组键是充分表达。您可能想要为查询中的列提供别名。
我从来没有用过这样的SET
。它是否与SELECT
一起使用?
SELECT @x := @x + 1
FROM some_table CROSS JOIN
(SELECT @x := 0) y;
我打错了,我的意思是在我的代码中有“SELECT”。只是改变了它。对此的道歉 –
嗯它确实工作。我想我拿走了太多的代码来达到最小的错误情况。我会继续玩,看看错误发生的位置。 –