【问题标题】:Why is this php code not fetching the first row from the mysql database?为什么这个 php 代码没有从 mysql 数据库中获取第一行?
【发布时间】:2026-02-10 02:35:01
【问题描述】:

似乎这个 php 代码获取了数据库中的所有行,但没有获取第一行。如果您调用数据库中的过程(参见下面的过程),它将按预期显示所有行。数据库有四列,在代码中它使用 echo 从第二行打印出数据,发生的情况是第一条记录没有显示,所以我认为它没有被提取。那么,可能是什么问题?

    //this is the broken part of my code
    $statement = $conn->prepare('call GetImage()');

        $statement->execute();

      while($row = $statement->fetch()){

    $dest_slash = str_replace('-', '/', $row[2]);
    $dest_slash_backslash = str_replace(';','\\', $dest_slash);
    $replace_root = str_replace($_SERVER['DOCUMENT_ROOT'],'',$dest_slash_backslash);
    $row[2] = $replace_root;

    $images_paths_with_num[] = array($image_count,$row[2]);
    $image_count++;
    echo $row[1];
  }

这是我正在使用的存储过程:

    CREATE DEFINER=`0901972749`@`%` PROCEDURE `GetImage`()
begin
    select imageID,imageName,imagePath,imageText
    from Images limit 500;
end

【问题讨论】:

  • 数据库中有订单吗?您可以使用“按 imageID 排序”确保记录按您希望的方式显示,以确保它们按照您希望的正确顺序显示。
  • 您能否通过硬编码查询获取第一行?
  • 我不得不提到它可以在工作台中调用 GetImage() 并且一切都按预期显示,所以问题可能出在 php 代码上。
  • 抱歉,我的代码没有任何问题。 Ricardo Ortega Magana 提供了解决方案。谢谢。
  • 我不确定您为什么要为此使用存储过程。这是非常不灵活的,并且该过程中没有任何内容无法通过具有完全相同内容的查询来复制。

标签: php mysql


【解决方案1】:

查看此过程(与问题相同):

   CREATE DEFINER=`0901972749`@`%` PROCEDURE `GetImage`()
begin
    select imageID,imageName,imagePath,imageText
    from Images limit 500;
end

在这种情况下,需要向它添加一个 order by 语句“order by imageID”,因为事情没有以正确的顺序显示。为了确保数据以正确的顺序显示,我们需要使用 order by 子句。但是,存储过程可能不是解决此问题的正确解决方案。对此感到抱歉:)

像这样:

CREATE DEFINER=`0901972749`@`%` PROCEDURE `GetImage`()
begin
    select imageID,imageName,imagePath,imageText
    from Images limit 500 order by imageID;
end

【讨论】: