在php中选择下一行

时间:2010-01-19 02:25:50

标签: php mysql

  

可能重复:
  Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error

我在mysql数据库中有一组记录,我正在尝试在网页上选择下一个和上一个按钮。我在php中编码它有问题;非常感谢任何帮助。

我的记录没有附加自动增量ID。

我的代码如下:

$result = mysql_query($query) or die("Couldn't execute query");

$row_number = 1;

while ($row = mysql_fetch_assoc($result)) { 
$row_number ++;

if ($row_number <= mysql_num_rows($result)) {
$nextRecord=mysql_data_seek($result,$row_number);

    while ($nextRow = mysql_fetch_row($nextRecord)) {
        echo $nextRow['family_accession_number'];}

当我尝试运行脚本时,出现以下消息:

Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 2 is invalid for MySQL result index 3 (or the query data is unbuffered) in C:\xampp\htdocs\survey\continuetitle.php on line 23

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\survey\continuetitle.php on line 25

第23行是:$nextRecord=mysql_data_seek($result,$row_number);

谢谢!

编辑: 我将while ($nextRow = mysql_fetch_row($nextRecord)) {更改为

while ($nextRow = mysql_fetch_row($result)) { 

但第23行也出现同样的错误

编辑:

在SQL查询中发现错误,该错误只返回一行。

3 个答案:

答案 0 :(得分:0)

$nextRecord=mysql_data_seek($result,$row_number-1);

答案 1 :(得分:0)

此方法意味着数据库会提取并将整个数据集返回给客户端(执行搜索的位置)。一个非常有效的解决方案是使用LIMIT子句使数据库只向客户端返回一行:

$select_qry=$select_qry . " LIMIT $offset,1";

℃。

答案 2 :(得分:0)

好吧,自从我使用mysql_函数使用直接数据库访问以来,已经有很长一段时间了。我正在使用AdoDB,我建议你自己尝试一下。如果使用AdoDB重写您的上述代码将是这样的:

//create a connection
$adodb = &ADONewConnection($dsn);
$adodb->SetFetchMode(ADODB_FETCH_BOTH);

//Execute a query
$rs =& $adodb->Execute($query);
if ( ! $rs )
{
  echo 'Error occured: ' . $adodb->ErrorMsg();
  die();
}
//check if query return any row
if ( $rs->RecordCount() > 0 )
{
  while ( $row = $rs->FetchRow() )
  {
    echo $row['family_accession_number'];
  }
}

如果您想拥有上一个和下一个链接,那么您必须对其进行页面处理。例如,在以下代码中,它将仅返回10行,并且页面将需要具有prev和next链接以获取下一行或前一行10行数据

//get page parameter
$page = intval($_GET['page']);
if ( $page <= 0 )
{
  $page = 1;
}
//default value
$per_page = 10;
//calculate start from the $page value
$offset = ($page - 1) * $per_page;

//create a connection
$adodb = &ADONewConnection($dsn);
$adodb->SetFetchMode(ADODB_FETCH_BOTH);

//execute query
$rs =& $adodb->SelectLimit($query, $per_page, $offset);
if ( ! $rs )
{
  echo 'Error occured: ' . $adodb->ErrorMsg();
  die();
}
//check if query return any row
if ( $rs->RecordCount() > 0 )
{
  while ( $row = $rs->FetchRow() )
  {
    echo $row['family_accession_number'];
  }
  //print prev and next link
  echo '<a href="THIS_PAGE_URL?page='.($page-1).'">Prev</a> ';
  echo '<a href="THIS_PAGE_URL?page='.($page+1).'">Next</a> ';
}
else
{
  echo 'No result';
}

我希望这是你想要做的。