我使用HeidiSQL编写我的PHP / MySQL查询。我想使用以下测试SQL
SELECT @summer := 0, wrapper.* FROM
(SELECT
bs_file.*,
@summer := IFNULL(@summer,0),
@summer := @summer+1 as summer
FROM bs_file
) as wrapper
WHERE wrapper.summer = 3
演示我的问题,它位于一个更复杂的查询中,这个场景实际上是有道理的。这个SQL基本上为每行增加@summer
。
预期的行为是数据库返回bs_file
表的第4行加上一些额外的字段(0,2,3)。
当我在HeidiSQL中执行此查询时,一切都按预期工作。
但是当我使用PDO时,我什么也得不到。
$sql = "SELECT @summer := 0, wrap...";
$connection->prepare($sql);
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);
$result
返回false
我尝试使用非预备语句,交易。我知道您可以更改连接属性,但我不知道要设置什么来接收我的结果。
我发现每次获取一行时@summer
都会设置为0
。
答案 0 :(得分:1)
我不太了解SQL,告诉你为什么你的查询不起作用 我也不能在mysql控制台中重现你所谓的结果 而且我非常怀疑它的PDO应该归咎于清除你的变量。
无论哪种方式,我都会在两个查询中执行此操作,首先设置变量,然后在其中使用查询
$pdo->query("SELECT @summer := 0");
$sql ="SELECT wrapper.* FROM
(SELECT
bs_file.*,
@summer := @summer+1 as summer
FROM bs_file
) as wrapper
WHERE wrapper.summer = 3";
$row = $pdo->query($sql)->fetch();
这段代码对我有用,无论它意味着什么。