2010-01-19 29 views
0

可能重複:
Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error在PHP選擇下一行

我有一個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查詢發現錯誤,只返回一行。

+0

也許你應該解釋爲什麼你想讓你的代碼到當前遊標的末尾。 – 2010-01-19 02:47:02

+0

對不起,我在我的SQL $查詢中發現一個錯誤;這就是爲什麼它不起作用。 – Tim 2010-01-19 02:56:52

回答

0

嘗試

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

有趣的是,當我添加-1時,錯誤消失了,但它返回當前記錄,而不是下一個。 – Tim 2010-01-19 02:42:34

+0

我在我的SQL $查詢中有錯誤;對錯誤感到抱歉。 – Tim 2010-01-19 02:57:36

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

如果你想有prev和next鏈接,那麼你必須有這方面的頁面處理。例如,在下面的代碼,它將返回只有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'; 
} 

我希望這是你想要的去做。