可能重复:
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查询中发现错误,该错误只返回一行。
答案 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';
}
我希望这是你想要做的。