阻止PHP PDO清除每行获取的变量

时间:2016-12-22 11:46:28

标签: php mysql sql sql-server pdo

我使用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

1 个答案:

答案 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();

这段代码对我有用,无论它意味着什么。