Oracle,sql,分页处理,一句sql搞定,原创

要求按照降序排列,例子如下
oracle 没有top,所以使用隐式游标来实现分页功能
select * from (
select * from (
select * from table order by field asc)
where rownum<=:limit*:page)

minus

select * from (
select * from (
select * from table order by field asc)
where rownum<=:limit*(:page-1))

变量说明如下
:limit 显示几条
:page 显示第几页

Share
Posted in 数据库. »

Oracle,blob,php,pdo,10g文件,图片,压缩,存放快速解决

使用oracle存储文件图片等数据,必须将文件数据存入数据库中blob对象中,如果你使用php进行此操作,那么必须使用事务 处理,否则无法解决,使用其它语言操作还没试验过!!此处使用pdo进行操作,如果要使用压缩,那么可以将压缩好的数据作为内容,装入blob
下文 提到的此方法,仅适用于php5之后的版本
<?
$sql = ”
insert into USER_INFO
(
USERIMG //这个字段是blob类型
)values(
EMPTY_BLOB()
)
RETURNING USERIMG INTO :blob //此处注意字段名
“;

foreach($param as $key=>$value){
$sql = str_replace(“:$key”,$value,$sql);
}
$conn->beginTransaction();
$statm = $conn->prepare($sql);
$statm->bindParam(“:blob”,$lob,PDO::PARAM_LOB); //绑定参数
//$lob = fopen(“c:/test.jpg”,”rb”); //可以直接使用文件资源
$lob = $param['al_userimg']; //也可以直接使用从文件中读出的数据,甚至可以是压缩的文件
$statm->execute();
$conn->commit(); //提交后文件会进入数据库,保证没有错,输出的时候指定好头

?>

Share
Posted in 数据库. Tags: , , , , . »

Php,Pdo,prepare,PreparedStatement,bindParam,

最近,非令人意外,在开发活动中,遇到意想不到的bug,就是关于PDO bindParam的问题
这是个严重的问题,如果不使用prepared Statement,会遭遇到严重的问题。
<?php
$sql = “select * from your table where key1=:key and key2=:key2″;
$statm = $conn->prepare($sql);
$statm->bindParam(‘:key1′,’key’,PDO_PARAM_STR);
$statm->bindParam(‘:key2′,’key’,PDO_PARAM_INT);
$rs = $statm->execute()
?>
这个是一般情况下通用的例子,但是,问题就出在这儿,当我使用inesert语句插入数据时,apache会崩溃,莫名其妙的崩溃,都是在帮定参数的时候崩溃
最后,我竟然发现当前面 使用过 prepare的时候,不管是否关闭oracle的游标,都会出现问题,当在同一进程中再次 prepare的时候,就没有办法再执行第二句批prepare的语句,估计 pdo针对oracle的prepare sql,还是用存储过程为好,不要盲目使用php.net上说的方法。
因为这个可能是bug的问题,所以,我不得不手工处理sql的参数bind,目前,网上还有次相关的资料
期待php下一个版本能解决这个问题

Share
Posted in 数据库. »

Orale10g连接,乱码,编码还有apache,php,pdo oci快速解决

1.解决连接问题:
参照我的个人空间中的上面两篇文章,同时要注意,Apache一定要在/etc/profile中的环境变量或者你自己设置在自己环境中的相关的环境变量生效后,启动,你的设置才会有效 ,下面的问题也是一样
2.Oralce10g 服务端和客户端的乱码问题:
基本原理:服务器端和客户端的编码设置要一致,避免服务器自动转换,可解决乱码问题
我是在中文环境下装的oracle
我在服务端 select * from prop$
发现 NLS_LANGUAGE是AMERICAN
NLS_CHARACTERSET 是 ZHS16GBK
此时客户端上设置 如下 设置环境变量,注意,设置完之后参看我第一条说的问题!,一定要看
For windows set NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
For Linux export NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
设置好以后,最好重启,释放系统内存,重新启动
都ok后,启动Apache,此时php和oracle连接的乱码一并可以解决!

Share
Posted in 数据库. »

PDO使用服务名连接远程的oracle db解决方案for Debian,接上一篇

接上一篇!
1.在Debian上安装Oracle客户端,如果不能安装,可使用强制方法安装
./runInstaller -ignoreSysPrereqs
2.安装Instant Client 详细内容见上篇
3.设置LD_LIBRARY_PATH,追加oracle client所在的目录下的lib
4.设置TNS_ADMIN,方法同上篇
5.用客户端配置网络服务
6.重启你的系统后,重启apache
此时你就可以用 oci:dbname=yoursercive的方式连接了

Share
Posted in 数据库. Tags: , , , , . »