Mysql “从表中选择*始终未命中第一行结果”

Mysql “从表中选择*始终未命中第一行结果”,mysql,database,Mysql,Database,我认为这是一个简单的编码错误。 当尝试从数据库表中获取所有结果时,第一个结果总是会丢失。即使在向数据库添加和删除信息时,它也将始终丢失具有最低ID的结果 $data = mysql_query("SELECT * FROM tbl_messages") or die(mysql_error()); $info = mysql_fetch_array( $data ); while($info = mysql_fetch_array( $data )) { Print "&

我认为这是一个简单的编码错误。 当尝试从数据库表中获取所有结果时,第一个结果总是会丢失。即使在向数据库添加和删除信息时,它也将始终丢失具有最低ID的结果

$data = mysql_query("SELECT * FROM tbl_messages") 
 or die(mysql_error()); 

 $info = mysql_fetch_array( $data ); 

 while($info = mysql_fetch_array( $data )) 
 { 
 Print "<a href=\"../message/index.php?user=\">" .$info['subject']. "</a>";
  echo "<hr>";
 } 
$data=mysql\u查询(“从tbl\u消息中选择*)
或者死(mysql_error());
$info=mysql\u fetch\u数组($data);
而($info=mysql\u fetch\u数组($data))
{ 
打印“”;
回声“
”; }
当前代码调用
mysql\u fetch\u array
并将结果(结果集的第一行)分配给
$info
。您不使用
$info
执行任何操作,在下一行中,您将通过调用
mysql\u fetch\u array
覆盖它

您需要删除此行:

$info = mysql_fetch_array( $data );
$info = mysql_fetch_array( $data ); 

删除第一条
mysql\u fetch\u数组
语句

差不多

$data = mysql_query("SELECT * FROM tbl_messages") 
 or die(mysql_error()); 

 while($info = mysql_fetch_array( $data )) 
 { 
 Print "<a href=\"../message/index.php?user=\">" .$info['subject']. "</a>";
  echo "<hr>";
 } 
$data=mysql\u查询(“从tbl\u消息中选择*)
或者死(mysql_error());
而($info=mysql\u fetch\u数组($data))
{ 
打印“”;
回声“
”; }
您正在使用上述代码跳过第一个条目

返回与获取的行相对应的数组并移动 内部数据指针在前面

这意味着,当您到达while时,您已经阅读了第一行,但尚未使用它。

来自php手册:

返回与获取的行相对应的数组,并将内部数据指针向前移动

那以后呢
$data=mysql\u query(…)
您将获得一个数组
$data
,内部数据指针指向
$data
的第一个元素

mysql\u fetch\u array(…)
的第一个调用将内部数据点向前移动,因此它现在指向第二个元素

然后,while循环在发出第一次打印之前再次调用
mysql\u fetch\u数组(…)
,以便打印第二个元素

您可以通过删除以下行来修复它:

$info = mysql_fetch_array( $data );
$info = mysql_fetch_array( $data ); 

我的表查询忽略了第0行(第一次出现),也遇到了类似的问题,现在我看到了这一点,我终于明白发生了什么

澄清也是可以理解的

您正在请求一个查询\u fetch\u数组,并将它找到的内容放入
$info
中。这似乎还可以。接下来,您将询问其余的行,因为您刚刚从可能的返回中删除了一行,所以它也可以完美地工作

删除此行:

$info = mysql_fetch_array( $data );

您可以从表中获取所有行。或者,如果你想知道的话,在你的
之前回显
$info
,而
以你正在打印的方式循环,或者只是尝试
变量转储
而已。

啊,你这个天才!这很有效,我知道这很简单。我真傻。