php使用odbc查询数据库并分页显示【亲测】

php使用odbc连接数据库的教程网上有很多,关于使用odbc分页的教程网上基本全部都是采集站自动复制的同一源码,而且这些个一模一样的源码都会报同一个错误“ Call-time pass-by-reference has been removed ”,按照教程将odbc_fetch_into($rst,$rowi,&$row);改为odbc_fetch_into($rst,$rowi,$row);还是不行!

下面直接放经过测试后的修正版odbc查询数据库并分页显示的源码(支出任意查询语句,并显示字段名称):

<?php
@$con = odbc_connect('DRIVER={SQL Server};SERVER=192.168.1.100;DATABASE=testDB',"sa","123456");//数据库名称    账户  密码
 
if (!($con)) { 
echo "<p>Connection to DB via ODBC failed: "; 
echo odbc_errormsg ($con ); 
echo "</p>\n"; 
echo '<br>数据库配置信息错误,请修改Eyuan_month.php的[ $con = odbc_connect(…… ]行';
//die;
}

// 下面两句sql语句用于统计查询结果数量,以及详细的结果。本源码基本只需要修改 数据库连接信息与下面两句sql语句即可!
$sql="select count(*) from testtable";// 查总记录数
$sql_detail="select * from testtable";// 查详情

//$sql = "select count(*) as total from tBSDevice"; //取得记录总数SQL语句
//$sql_detail = "select * from tBSDevice"; //取得详细数据SQL语句
$rst = odbc_exec($con,$sql) or die("$sql查询出错"); //执行取得记录总数SQL语句
$recordcount = odbc_result($rst,1); //取得记录总数,在这里也可以用$recordcount = odbc_result($rst,"total");
odbc_free_result($rst); //释放资源

$pagesize = 3; //一页显示记录数

$pagecount = bcdiv($recordcount+$pagesize-1,$pagesize,0); //算出总页数
//if(!isset($page)) $page = 1; //如果没有指定显示页码,缺省为第一页【错误】
if(!isset($_GET['page'])){//$page的正确获取方式
	$page=1;
}else{
	$page=(int)$_GET['page'];
}

if($page<1) $page = 1; //如果页码比1小,则显示第一页
if($page>$pagecount) $page = $pagecount; //如果页码比总页数大,则显示最后一页

if($page>0){ //页码比0大,表示有数据
   echo '>> 分页 ';
   echo '<a href="?page=1">首页</a> ';
   if($page>1){
      echo '<a href="?page='. ($page-1) . '">前页</a> ';
   }
   else{
      echo '前页 ';
   }
   if($page<$pagecount){
      echo '<a href="?page='. ($page+1) . '">后页</a> ';
   }
   else{
      echo '后页 ';
   }
   echo '<a href="?page=' . $pagecount . '">尾页</a> ';
   echo '页次: ' . $page . '/' . $pagecount . '页 ';
   echo $pagesize . '条/页 ';
   echo '共' . $recordcount . '条 ';

  // $sql_detail = "select * from testtable"; //取得数据SQL语句
   $rst = odbc_exec($con,$sql_detail) or die("$sql查询出错"); //执行取得数据SQL语句

   $fieldcount = odbc_num_fields($rst); //取得字段总数

   echo '<table border="1" cellspacing="0" cellpadding="0">';
   echo '<tr>';
   for($i=1;$i<=$fieldcount;$i++){
      echo '<th>' . odbc_field_name($rst,$i) . '</th>'; //显示第$i个字段名
   }
   echo '</tr>';
   $rowi = ($page-1)*$pagesize+1;
   for($i=0;$i<$pagesize;$i++){
      echo '<tr>';
      if($rowi>$recordcount){
         for($j=0;$j<$fieldcount;$j++){
            echo '<td> </td>';
         }
      }
      else{
        // odbc_fetch_into($rst,$rowi,&$row);//网上流传的此处源码【错误】		
	odbc_fetch_into($rst,$row,$rowi);// 修改后的源码,php5.6测试通过
         for($j=0;$j<$fieldcount;$j++){
            $field = $row[$j];
            if($field=='') $field = ' ';
            echo '<td>' . gbk2utf($field)  . '</td>';
         }
         $rowi = $rowi+1;
      }
      echo '</tr>';
   }
   echo '</table>';

   odbc_free_result($rst); //释放资源
}
else{
   echo "无数据";
}

odbc_close($con); //关闭连接并释放资源

?

说明:网上给的odbc分页源码,错误之处主要有2个地方,第一个是page参数的获取方式不对,第二个是 odbc_fetch_into 这句话报错(可能是php版本的问题?),另外一个是$PHP_SELF这个东西,我直接给删除了。这个php版的源码可以说是很通用了。无论你查询字段有多少个它都会自动列出字段作为table表的首行,然后将查询结果显示在下方。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/php使用odbc查询数据库并分页显示【亲测】/

赞赏

微信赞赏支付宝赞赏

快速找出vpn拨号、宽带连接用户名和密码
php中mysql报错call-to-a-member-function-fetch_assoc-on-boolean
php连接查询mysql数据库