2016-01-10 108 views
3

我想从其他数组中分离第一个PDO结果数组。这里是我的尝试:如何将查询的第一个结果与其他结果分开?

$iterator = 1; 
while($results = $stmt->fetch(PDO::FETCH_ASSOC) and $iterator == 1){ 
    /* I need just first row here */ 
    print_r($results); 
    $iterator++; 
} 

while($results = $stmt->fetch(PDO::FETCH_ASSOC)){ 
    /* I need other rows here */ 
    print_r($results); 
} 

第一while()执行我的代码(上面的代码永远只是打印查询的第一个结果)。那么,我该如何解决它?

注意:我不想使用fetchAll();

回答

5

试着这么做:

$results = $stm1->fetch(); 
print_r($results); 

while($results = $stm1->fetch()){ 
    print_r($results); 
} 

你实际上并不需要一个循环来获得的第一个元素,然后就可以恢复迭代与曾经被认为是你的第二个循环。

while($results = $stm1->fetch() and $iterator == 1){ 

的问题是,如果在结果集中一个或多个结果,你会总是呼叫$stm1->fetch()两次:一次是你第一次进入循环,然后再次进行第二次迭代,然后再实际检查($iterator == 1)不再成立。

如果只有两个结果在结果集中,那么将在从未被进入第二循环表现(因为取不会有任何结果左)。

+0

在第一种情况下不需要while()控制结构 - 简单的$ firstRow = $ stm1-> fetch()就足够了。在第一次迭代之后制造一个循环并破坏是浪费 –

+0

@DenisMysenko yes;我相应地调整了。简单回答这个问题的小脑袋。 – jbafford

3

你并不需要一个while循环,因为你只需要取1行,你并不需要一个while循环,只是做:

$firstRow = $stmt->fetch(PDO::FETCH_ASSOC); 

之后,你可以把你的while循环就像你已经做的那样。

+0

那么以后如何获取其余行? – stack

+0

@stack正如你已经用你的第二个循环 – Rizier123

+0

做了一个'问题' - 第二个循环会错过第一行(因为它已经被取出)。只是不要忘记包括$ firstRow你需要在代码 –

1
$result = $stmt->fetch(PDO::FETCH_ASSOC); 

将只给出您的查询执行的第一行。即使你使用它只会导致第一行。

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

将给出您的查询执行的所有记录。

相关问题