Linux(Redhat)安装Oracle client和php pdo_oci扩展

老黎 发表于 2012-09-19 14:56:52

 1、安装Oracle client

前往官网下载instant-client安装程序

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

以Redhat 32bit为例,这里选择下载Instant Client for Linux x86

 

然后选择你要安装的client版本, 目前Linux下使用Version 10.2.0.5版本较为合适

下载并安装安装basic和devel这两个包

oracle-instantclient-basic-10.2.0.5-1.i386.rpm

oracle-instantclient-devel-10.2.0.5-1.i386.rpm

rpm安装命令为rpm -ivh xxx.rpm

 

安装后,执行命令whereis oracle回显如下结果:

oracle: /usr/lib/oracle /usr/include/oracle /usr/share/oracle

说明oracle client已经安装到以上目录了,接着配置环境变量

 

 

在 /etc/profile 文件最后,加入:

export ORACLE_HOME=/usr/lib/oracle/10.2.0.5/client/

export LD_LIBRARY_PATH=:$ORACLE_HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH:.

export TNS_ADMIN=$ORACLE_HOME

export PATH=$PATH:$ORACLE_HOME/bin:.

执行source /etc/profile 使配置生效。

 

 

2、使用php源码重新编译来启用pdo_oci

把oracle client的include复制到php源码里用以编译pdo_oci

假设php源码在~/php-src目录下,则执行

cp -f /usr/include/oracle/10.2.0.5/client/* ~/php-src/include/

 

使用phpinfo()取得原来的./configure参数,在其后加上 --with-pdo-oci

例如:

cd ~/php-src/

'./configure' ' '--with-pdo-mysql=/data/app/mysql' '--enable-sockets' '--enable-soap' '--enable-mbstring' '--with-mcrypt=/usr/local/lib' '--with-pdo-oci'

make && make install

如无报错,则重编成功

phpinfo();检查结果

阅读全部内容…

Tags: Oracle,pdo,pdo_oci,php

老黎的聚宝盘(PHP) 1条评论

PHP数组foreach逆序输出,php数组倒序

老黎 发表于 2011-01-08 10:59:41

简单的一个php数组函数,之前没这个需要一直都不知道有这么一个函数,擦汗...

php数组逆序输出代码
  1. foreach(array_reverse($array) AS $key=>$value){ 
  2. echo $value.'
    '

 

array_reverse

(PHP 4, PHP 5)

array_reverse返回一个单元顺序相反的数组

说明

array array_reverse ( array $array [, bool $preserve_keys ] )

array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keysTRUE 则保留原来的键名。

Example #1 array_reverse() 例子

<?php
$input  
= array("php"4.0, array("green""red"));
$result array_reverse($input);
$result_keyed array_reverse($inputTRUE);
?>

这将使 $result$result_keyed 具有相同的单元,但是注意键名的区别。$result$result_keyed 的打印输出显示分别为:

Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

Note: 第二个参数是 PHP 4.0.3 中新加的。

Tags: php,逆序

老黎的聚宝盘(PHP) 1条评论

php使用date取日期与实际差一天的解决办法

老黎 发表于 2010-06-11 04:48:27

取使用date取服务器日期
echo date("Y-m-d");
发现和实际日期相差一天,解法方法如下:

1.修改php.ini文件
date.timezone=PRC
//PRC是中华人民共和国意思
修改好后,重启一下apache就可以了

 

2.在php文件头加一行来定义时区
date_default_timezone_set("Asia/Chongqing");

 

阅读全部内容…

Tags: php

老黎的聚宝盘(PHP) 没有评论

PHP面向对象思想

老黎 发表于 2009-06-25 22:33:00

OOP(Object-Oriented Programming,面向对象编程)技术为编程人员敞开了一扇大门,使其编写的代码更简洁、更易于维护、并具有更强的可重用性。正因为OOP具有以上多种已被证实的功能,使得当今人们介绍的新语言大多都是面向对象的。PHP支持OOP的很多实用功能。

数据与工作在其上的代码在OOP中存在着基本的联系,OOP允许你围绕这种联系设计和实现程序。

类是用来建立对象的模板。

对象是类的实例。
    对象和类的关系有些类似于值和数据类型的关系。
    只有一种整数类型,但会有很多整数;程序只定义了一个类,但是可以通过这个类来创建很多不同的(或相同的)对象。

属性(property):与对象相关联的数据。
方法(method):与对象相关的函数。
    在定义一个类时,可以给属性命名,并对其方法编写代码。

封装(encapsulation):类向实用对象的代码提供一些方法(接口,interface),使得外部不能直接访问对象的数据结构。
    只有类中的代码才能够改变对象的数据结构,可以易于找出bug;也易于维护,可以改变类接口的内部实现,而不用改变使用类的代码(假如接口不变的话)。

继承(inheritance):基于已存在的类定义新的类,在新类中,可以新增或改变一些属性和方法。
    被继承的类(基础类)称为超类(superclass)或基类(base class),新类则称为子类(subclass)或派生类(derived class)。
    继承是代码重用的一种形式。

Tags: oop,php

老黎的聚宝盘(PHP) 没有评论

[PHP][转载]Database.core.php 数据库操作类分析

老黎 发表于 2008-10-10 23:34:00

快速浏览之中看到一篇感兴趣的
从此贴中引发出来的一些讨论很值得去看看
有兴趣的 绝不能错过

原文地址:http://bbs.phpchina.com/viewthread.php?tid=63549&extra=&page=1
出自 PHP China
作者:白菜


Database.core.php 数据库操类分析

在项目架构的设计上,Shopnc对数据库操作类进行了进一步的分离,增加了一个中间层,可以方便的切换 adodb,mysql,pdo等操作方式,像方法中的GetRow等都是调用的底层类中的方法,这些方法就是对 增、删、改、查、联表 等操作都进行了再次封装

代码分析:
/////////////////////////////////////////////////////////////////////////////
// 这个文件是 网城创想多用户商城 项目的一部分
//
// Copyright (c) 2007 - 2008 www.shopnc.net
//
// 要查看完整的版权信息和许可信息,请查看源代码中附带的 COPYRIGHT 文件,
// 或者访问 http://www.shopnc.net/ 获得详细信息。
/////////////////////////////////////////////////////////////////////////////
/**
* FILE_NAME : database.core.php FILE_PATH : multishopclassescoredatabase.core.php
* ....数据库操作类
*
* @copyright Copyright (c) 2007 - 2008 www.shopnc.net
* @author ShopNC Develop Team
* @version Thu Nov 08 13:36:35 CST 2007
*/
abstract class DataBase extends DBEngine{

/**
   * 获得一条记录
   *
   * @param int $id 记录ID
   * @param string $table_name 查询的表名
   * @param string $field   记录ID字段名
   * @param string $fields 查询的字段
   * @return array $rs_row 返回数组形式的查询结果
   */
public function GetOneRow($id,$table_name,$field,$fields="*"){
   $rs_sql = "select {$fields} from `{$table_name}` as {$table_name} where {$field}='" . $id . "'";
   $rs_row = $this->GetRow($rs_sql);
   return $rs_row;
}
/**
   * 得到某条特定记录
   *
   * @param var $condition 可以是条件语句,也可以是数组,如果是数组,则统一为相等计算,并且为and关系
   * @param string $table_name 不带前缀的表的名称
   * @param string $fields 所需要得到的列
   * @param string $order 排序信息
   * @param string $group 分组信息
   * @return var[] 一维数组,形式如$arr[列名]
   */
public function GetTheRow($condition,$table_name,$fields="*",$order = "",$group = ""){
   $condition_str = "";
   if (is_array($condition) == true){
//如果是数组,那么数组的键为字段名称,组合成为查询条件
foreach($condition as $k=>$v){
$condition_str .= " and {$k} = {$v}";
}
   }else{
$condition_str = $condition;
   }
  
   //得到完整的SQL语句
   $rs_sql = $this->GetSql($table_name,$condition_str,$fields,$order,$group);
   $rs_row = $this->GetRow($rs_sql);
   return $rs_row;
}
/**
   * 组合多个表联结SQL语句
   *
   * @param string[] $table_array   放置表的数组
   * @param string[] $join_str   放置表间连接类型,一般有inner join/left join
   * @param string[] $on_array   放置联接条件的数组,其数组数量与联接类型数量一致
   * @param string[] $fields_array   放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
   * @param string $where_str   条件语句,形式如, and 表名.字段 = 值
   * @param string[] $order_array   其用法与$fields_array类似
   * @param string[] $group_array   其用法与$fields_array类似
   * @return string
   */
public function GetJoinTableSql($table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$order_array = array(),$group_array = array()){
   $from_str = "";
   $select_str = "";
   $order_str = "";
   $group_str = "";
   if(is_array($table_array) && is_array($on_array) && is_array($fields_array)){
//必须是2个或以上的表进行关联
if(count($table_array) <= 1){
return "";
}
//表的数量比联接类型大1
if(count($table_array) != count($on_array) + 1){
return "";
}
if(count($table_array) < count($fields_array)){
return "";
}
//组合from部分SQL语句
foreach($table_array as $k=>$v){

if (!strstr($v," as ")){    
    $rename = " as " . $v;
}else{
    $allname = $v;
   
    $v = trim(substr($v,0,strpos($v,"as")));
    $rename = strstr($allname," as ");
    $table_array[$k] = str_replace(" as ","",$rename);
}
if($k == 0){
    $from_str .= "`" . $v . "` " . $rename;
}else{
    $from_str = $from_str . " " . $join_str . " `" . $v ."` " . $rename . " on " . $on_array[$k - 1] . " ";
}
}
//组合SELECT部分的SQL语句
foreach($fields_array as $k=>$v){
if (trim($v) != ""){
    $f_arr = explode(",",$v);
    foreach ($f_arr as $f_k=>$f_v){
   if (strpos("(",$f_v) > 0 && strpos("*",$f_v) < 0){
   $f_arr[$f_k] = str_replace("(","(" . $table_array[$k] . "." ,$f_v);
   }else if(strpos("(",$f_v) > 0 && strpos("*",$f_v) > 0){
   $f_arr[$f_k] = $f_v;
   }else{
   $f_arr[$f_k] = $table_array[$k] . "." . $f_v;
   }
    }
    $fields_array[$k] = implode(",",$f_arr);
    $select_str .= $fields_array[$k] . ",";
}
}
$select_str = trim($select_str);
if (substr($select_str,strlen($select_str)-1,1) == ","){
$select_str = substr($select_str,0,strlen($select_str)-1);
}
//WHERE部分SQL语句
$where_str = $this->_conditionWhere($where_str);
//组合Order部分的SQL语句
foreach($order_array as $k=>$v){
if (trim($v) != ""){
    $f_arr = explode(",",$v);
    foreach ($f_arr as $f_k=>$f_v){
   $f_arr[$f_k] = $table_array[$k] . "." . trim($f_v);
    }
    $order_array[$k] = implode(",",$f_arr);
    $order_str .= $order_array[$k] . ",";
}
}
$order_str = trim($order_str);
if (trim($order_str) != ""){
if (substr($order_str,strlen($order_str)-1,1) == ","){
    $order_str = substr($order_str,0,strlen($order_str)-1);
}
$order_str = " order by " . $order_str;
}
//组合Group部分的SQL语句
foreach($group_array as $k=>$v){
if (trim($v) != ""){
    $f_arr = explode(",",$v);
    foreach ($f_arr as $f_k=>$f_v){
   $f_arr[$f_k] = $table_array[$k] . "." . trim($f_v);
    }
    $group_array[$k] = implode(",",$f_arr);
    $group_str .= $group_array[$k] . ",";
}
}
$group_str = trim($group_str);
if (trim($group_str) != ""){
if (substr($group_str,strlen($group_str)-1,1) == ","){
    $group_str = substr($group_str,0,strlen($group_str)-1);
}
$group_str = " group by " . $group_str;
}
return "select " . $select_str . " from " . $from_str . " " . $where_str . " " . $order_str . " " . $group_str;
   }else{
return false;
   }
}
/**
   * 构造最终应用于SQL查询的where检索语句
   *
   * @param string $condition_str 构造后的SQL检索语句字符串
   * @return string $condition_str 返回完整的where检索语句字符串
   */
public function _conditionWhere($condition_str){
  
   if(substr(trim($condition_str),0,3)=="and"){
$condition_str = " where " . substr(trim($condition_str),3);
   }
  
   return $condition_str;
}
/**
   * 返回符合条件的记录总数
   *
   * @param string $table_name   表名
   * @param string $condition   条件
   * @return int
   */
public function CountRows($table_name, $condition){
   $row_sql = "SELECT count(*) as count FROM `{$table_name}` as {$table_name} ";
   if("" != $condition){
$row_sql .= " where " . $condition;
   }
   $count = $this->GetOne($row_sql);
   return $count;
}
/**
   * 根据条件更新多条记录
   *
   * @param array $update_array 更新的字段及值,一维数组
   * @param string $table_name 要更新的表的名称
   * @param string $condition 更新条件
   * @param string $genre 更新的类型,common普通直接付值,formula函数或运算形式的付值
   * @return boolen
   */
public function UpdateRows($table_name, $update_array, $condition = "",$genre = "common"){
   $row_sql = "UPDATE `{$table_name}` SET";
   if(is_array($update_array)){
foreach ($update_array as $key => $value){
if ($value == "null" || $genre == "formula"){
    $set_string .= ", {$key} = " . $value;
}else if($genre == "common"){
    $set_string .= ", {$key} = '" . $value . "'";
}
}
$row_sql .= substr($set_string, 1);
   }else{
return false;
   }
   if("" != $condition){
$row_sql .= " where " . $this->_DropName($condition,$table_name);
   }
   return $update_rs = $this->Execute($row_sql);
}
/**
   * 更新一条记录
   *
   * @param int $id 更新记录的ID值
   * @param array $update_array 更新字段数组
   * @param string $table_name 数据表名
   * @param string $field 更新记录ID的字段名
   * @return boolean
   */
public function UpdateRow($id, $update_array, $table_name, $field){
   if($this->_dbconfig['engine_type'] == "adodb"){
$row_sql = "select * from `{$table_name}` as {$table_name} where {$field} = '" . $id ."'";
$update_rs = $this->Execute($row_sql);
$update_sql = $this->GetUpdateSQL($update_rs, $update_array);
   }else{
$update_sql = $this->GetUpdateSQL($table_name, $update_array , "where {$field} = '" . $id ."'");
   }
   if(!empty($update_sql)){
return $this->Execute($update_sql);
   }else{
return false;
   }
}
/**
   * 插入一条记录
   *
   * @param array $insert_array 插入字段数组
   * @param string $table_name 插入数据表名
   * @param string $field 表ID字段
   * @return boolean
   */
public function InsertRow($insert_array, $table_name, $field){
   if($this->_dbconfig['engine_type'] == "adodb"){
$insert_sql = "select * from `{$table_name}` where {$field}='-1'";
$insert_rs = $this->Execute($insert_sql);
$insertSql = $this->GetInsertSQL($insert_rs, $insert_array);
   }else{
$insertSql = $this->GetInsertSQL($table_name, $insert_array);
   }
   return $this->Execute($insertSql);
}
/**
   * 删除一条或多条记录
   *
   * @param array or int $del_array 删除记录ID或ID数组
   * @param string $table_name 删除记录所在表名
   * @param string $field 删除记录匹配字段
   * @param string $conditon   删除条件
   * @return bool
   */
public function DelRow($del_array,$table_name,$field,$conditon = ""){
   if(is_array($del_array)){
foreach ($del_array as $value){
$this->DeleOneRow($value,$table_name,$field,$conditon);
}
return true;
   }else{
return $this->DeleOneRow($del_array,$table_name,$field,$conditon);
   }
}
/**
   * 删除某一条记录
   *
   * @param string $del_value   要删除的字段值
   * @param string $table_name   删除记录所在表名
   * @param string $field   删除记录匹配字段
   * @param string $conditon   删除条件
   * @return boolen
   */
public function DeleOneRow($del_value = "",$table_name,$field = "",$conditon = ""){
   if ($del_value != "" && $field != ""){
$conditon_str = " and {$field} = '" . $del_value . "'";
   }
   $conditon_str .= " " . $conditon;
   $del_sql = "delete from `{$table_name}` " . $this->_DropName($this->_conditionWhere($conditon_str),$table_name);
   return $del_rs = $this->Execute($del_sql);
}
/**
   * 获得最后一条记录
   *
   * @param string $table_name
   * @param string $field
   * @param string $conditionstr
   * @param string $order 排序语句
   * @param string $group 分组语句
   * @return array $rs_row
   */
public function GetLastRow($table_name, $field, $conditionstr="",$order="",$group=""){
   //得到完整的SQL语句
   $rs_sql = $this->GetSql($table_name,$conditionstr,"Max({$field}) as {$field}",$order,$group);
   $rs_row = $this->GetRow($rs_sql);
   return $rs_row;
}
/**
    * 获得列表的操作
    *
    * @param string $obj_condition
    * @param object $obj_page
    * @param string $tablename
    * @param string $fields   取得特定字段,默认为*
    * @param string $order   排序语句,如member_id desc
    * @param string $group   分组语句
    * @param int $count 需要的记录数量
    * @return array
    */
public function GetList($conditionstr = "",&$obj_page,$table_name,$fields="*",$count = 0,$order = "",$group = ""){
   //得到完整的SQL语句
   $rs_sql = $this->GetSql($table_name,$conditionstr,$fields,$order,$group);

   return $this->GetResultArray($rs_sql,&$obj_page,$count);
}
/**
   * 根据分页对象的设置,获取当前页面的数据列表
   *
   * @param object $obj_page   分页对象
   * @param string[] $table_array   放置表的数组
   * @param string[] $join_str   放置表间连接类型,一般有inner join/left join
   * @param string[] $on_array   放置联接条件的数组,其数组数量与联接类型数量一致
   * @param string[] $fields_array   放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
   * @param string $where_str   条件语句,形式如, and 表名.字段 = 值
   * @param string[] $order_array   其用法与$fields_array类似
   * @param string[] $group_array   其用法与$fields_array类似
   * @param int $count 需要的记录数量
   * @return var[]
   */
public function GetJoinList(&$obj_page,$table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$count=0,$order_array = array(),$group_array = array()){
   //得到一个完整的SQL语句
   $list_sql = $this->GetJoinTableSql($table_array,$join_str,$on_array,$fields_array,$where_str,$order_array,$group_array);
   return $this->GetResultArray($list_sql,$obj_page,$count);
}
/**
   * 得到某一条记录
   *
   * @param string[] $table_array   放置表的数组
   * @param string[] $join_str   放置表间连接类型,一般有inner join/left join
   * @param string[] $on_array   放置联接条件的数组,其数组数量与联接类型数量一致
   * @param string[] $fields_array   放置所需要的字段,其与表的数组位置要对应,无须再写上表名称,只许写上字段名称即可,例如$table_array = array('a','b','c'); $fields_array = array('字段1','','字段1');那所需要的字段为a.字段1,c.字段1
   * @param string $where_str   条件语句,形式如, and 表名.字段 = 值
   * @param string[] $order_array   其用法与$fields_array类似
   * @param string[] $group_array   其用法与$fields_array类似
   * @return string
   */
public function GetOneJoinArray($table_array,$join_str,$on_array,$fields_array = array('*'),$where_str = "",$order_array = array(),$group_array = array()){
   //得到一个完整的SQL语句
   $list_sql = $this->GetJoinTableSql($table_array,$join_str,$on_array,$fields_array,$where_str,$order_array,$group_array);
   return $this->GetRow($list_sql);
}
/**
   * 根据分页对象的设置,获取当前页面的数据列表
   *
   * @param string $sql_str 完整的SQL查询语句
 &nbs ...

Tags: php

老黎的聚宝盘(PHP) 没有评论
Loading
归档
订阅RSS