2010-01-19 3 views
0

Можно создать дубликат:
Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given errorВыберите следующую строку в PHP

У меня есть набор записей в базе данных MySQL, и я пытаюсь сделать выберите следующие и предыдущие кнопки на веб-странице. У меня есть вопросы, кодирующие его в php; любая помощь очень ценится.

В моих записях нет идентификатора автоматического увеличения.

Мой код выглядит следующим образом:

$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);

Спасибо!

EDIT: Я изменил while ($nextRow = mysql_fetch_row($nextRecord)) { к

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

, но та же ошибка происходит на линии 23

РЕДАКТИРОВАТЬ:

Нашли ошибку в SQL запрос, который возвращает только одну строку.

+0

Возможно, вам стоит объяснить, почему вы хотите, чтобы ваш код переместился в конец текущего курсора. –

+0

Извините, я нашел ошибку в моем SQL-запросе; поэтому он не работает. – Tim

ответ

0

попробовать

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

Интересно, что когда я добавил -1, ошибка исчезла, но она вернула текущую запись, а не следующую. – Tim

+0

У меня ошибка в моем запросе SQL $; Извините за ошибку. – Tim

0

Этот метод означает, что база данных много получает и возвращает весь набор данных для клиента (где искать осуществляется). Гораздо эффективное решение было бы использовать предложение LIMIT, чтобы сделать базу данных возвращать только одну строку к клиенту:

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

C.

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 строк, и страницам должны иметь предыдущую и следующую ссылку, чтобы получить следующие или предыдущие 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'; 
} 

Я надеюсь, что это то, что вы хотите делать.

Смежные вопросы