Php sonraki satırı seçin [çoğaltmak]

3 Cevap php

Possible Duplicate:
Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error

Ben bir MySQL veritabanı kayıtları bir dizi var ve bir web sayfasında seçme önceki ve sonraki düğmeleri yapmaya çalışıyorum. Ben ancak php kodlayarak sorunları var; Herhangi bir yardım büyük beğeni topluyor.

Benim kayıtları otomatik artış id onlara bağlı gerekmez.

Aşağıdaki gibi benim kod:

$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'];}

Ben komut dosyası çalıştırmayı denediğinizde, aşağıdaki mesaj çıktı:

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

Satır 23 olduğunu: $nextRecord=mysql_data_seek($result,$row_number);

Teşekkürler!

EDIT: I changed while ($nextRow = mysql_fetch_row($nextRecord)) { to

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

ancak aynı hata satır 23 oluşur

EDIT:

Sadece bir satır döndürür SQL sorgusu bulunamadı hatası.

3 Cevap

denemek

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

Bu yöntem, veritabanı çok istemci (nerede yapılır aramaya) ayarlandığında tüm verileri alıp dönmek anlamına gelir. Bir çok etkili bir çözüm veritabanı müşteriye tek bir satır döndürür yapmak için LIMIT ifadesini kullanmak olacaktır:

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

C.

I mysql_ işlevleri kullanarak doğrudan veritabanı erişimi beri Eh, bu uzun bir süre. I AdoDB kullanıyorum ve kendiniz deneyin öneririz. Sizin yukarıdaki kodu adodb böyle olacak kullanılarak yazılabilir eğer:

//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'];
  }
}

Eğer önceki ve sonraki bağlantıya sahip olmak istiyorsanız, o zaman bunun için bir sayfa işleme olmalıdır. Örneğin, aşağıdaki kodda, sadece 10 satır döndürür ve sayfa veri sonraki veya önceki 10 satır almak için önceki ve sonraki bağlantıya olması gerekir

//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';
}

Ben bu yapmak istediğiniz ne olduğunu umuyoruz.