【问题标题】:How to separate first result of query from the rest?如何将查询的第一个结果与其他结果分开?
【发布时间】:2026-02-12 11:15:02
【问题描述】:

我想将 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();

【问题讨论】:

    标签: php mysql arrays pdo


    【解决方案1】:
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    

    将只给出查询执行的第一行。即使你使用 while 它只会产生第一行。

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

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

    【讨论】:

      【解决方案2】:

      您不需要 while 循环,因为您只想获取不需要 while 循环的 1 行,只需执行以下操作:

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

      之后,您可以像以前一样放置您的 while 循环。

      【讨论】:

      • 那之后如何获取剩余的行?
      • 一个“问题” - 第二个循环将错过第一行(因为它已经被提取)。只是不要忘记在代码后面的某个地方包含 $firstRow 你是否需要一个完整的集合
      • @stack nm 我在回答中的第一部分,我在那里犯了一个错误。唯一发生的事情是在第一次迭代之后,它将首先获取第二行,然后检查是否$iterator == 1,然后评估为 false,因此您不会再次进入循环,但您获取了第二行跨度>
      【解决方案3】:

      尝试类似:

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

      您实际上不需要循环来获取第一个元素,然后您可以使用曾经的第二个循环继续迭代。

      问题

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

      是如果结果集中有一个或多个结果,你会总是调用$stm1->fetch()两次:第一次进入循环,然后第二次进入循环在您实际检查 ($iterator == 1) 不再正确之前进行迭代。

      如果您的结果集中只有两个结果,那么这将体现在第二个循环中永远不会被输入(因为 fetch 不会留下任何结果)。

      【讨论】:

      • 第一种情况下不需要 while() 控制结构——简单的 $firstRow = $stm1->fetch() 就足够了。在第一次迭代后创建一个循环并中断是多余的
      • @DenisMysenko 是的;我只是做了相应的调整。过于字面地回答问题时会出现轻微的脑残。
      最近更新 更多