从表中选择*总是错过第一行结果

时间:2013-06-27 10:59:22

标签: 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 "<a href=\"../message/index.php?user=\">" .$info['subject']. "</a>";
  echo "<hr>";
 } 

4 个答案:

答案 0 :(得分:2)

您当前的代码调用mysql_fetch_array并将结果(结果集的第一行)分配给$info。您没有对$info执行任何操作,并在下一行中使用另一个mysql_fetch_array调用覆盖它。

您需要删除此行:

$info = mysql_fetch_array( $data );

答案 1 :(得分:1)

从php手册:

array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )  
     

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

之后 $data = mysql_query(...)您得到一个数组$data,内部数据指针指向$data的第一个元素。

mysql_fetch_array(...)的第一次调用会提前移动内部数据点,因此它现在指向第二个元素。

然后,你的while循环在发出第一个Print之前调用mysql_fetch_array(...) AGAIN,因此第二个元素被打印出来。

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

$info = mysql_fetch_array( $data ); 

答案 2 :(得分:0)

删除第一个mysql_fetch_array语句。

类似

$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>";
 } 

您正在使用上述代码跳过第一个条目。

来自mysql_fetch_array

  

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

这意味着当你遇到这段时间时,你已经阅读了第一行,但尚未使用它。

答案 3 :(得分:0)

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

澄清也是可以理解的。

您要求查询_fetch_array并将其找到的内容放在$info中。这似乎没问题。接下来,您要求剩余的行,因为您刚从可能的返回中删除了一行,它也可以完美地运行。

删除此行:

$info = mysql_fetch_array( $data );

然后从表中获取所有行。或者,如果您想知道,请按照您正在打印的方式在$info循环之前回复while,或者只是尝试var_dump