Usando o Oracle no Debian + classe em PHP5
Para usar o Oracle no Debian façam o seguinte:
1)Faça o download do oracle-instantclient-foo.rpm do site da oracle.
2)Converta o pacote para Debian: alien oracle-instantclient-foo.rpm
3)Instale o package:
dpkg -i oracle-instantclient-foo.deb
4)Ative o oci8 no php e:
Pronto!
Para conectar no oracle pelo php, pode usar a classe que montei:
ora.class.php:
Crie uma pasta com o mesmo nome do ORCL_SERVICE_NAME e crie o arquivo abaixo nesta pasta: (com isso você tem a mesma classe mas com conectores distintos, sem precisar configurar os TSNames do Oracle.)
sid.inc:
functions.class.php:
teste.php:
1)Faça o download do oracle-instantclient-foo.rpm do site da oracle.
2)Converta o pacote para Debian: alien oracle-instantclient-foo.rpm
3)Instale o package:
dpkg -i oracle-instantclient-foo.deb
4)Ative o oci8 no php e:
Pronto!
Para conectar no oracle pelo php, pode usar a classe que montei:
ora.class.php:
<?php
##############################
# #
# Oracle Class #
# Created By Roberta Brandao #
# robertanrbrandao@gmail.com #
##############################
class ora_connect{
var $sid, $connection;
var $query;
var $host;
var $total_record,$rec_position;
var $total_fields, $field_name;
function ora_connect($sid_locale){
global $ORCL_HOST, $ORCL_USER_NAME, $ORCL_PASSWORD, $SID_VALUE;
require_once($sid_locale.'/sid.inc');
$this->host=$ORCL_HOST;
$this->sid=$SID_VALUE;
$this->connection = oci_connect($ORCL_USER_NAME,$ORCL_PASSWORD,$this->sid) or die ($this->get_error_msg($this->connection,"Problem while connecting to ".$this->sid." server..."));
}
function db_query($query_str="")
{
$this->sql=$query_str;
$this->rec_position=0;
// if($query_str==""){
// $query_str=$this->query_stmt;
//}
$this->query = @oci_parse($this->connection, $query_str);
oci_execute($this->query)or die($this->get_error_msg($this->query ,"Query Error : ".$query_str));
}
function db_query_return($query_str="",$db=""){
if($query_str==""){
$query_str=$this->query_stmt;
}
$this->query = oci_parse($this->connection, $query_str);
if($db=="Default") {
return oci_execute($this->query,OCI_DEFAULT);
} else {
return oci_execute($this->query);
}
}
function select($query_str=""){
$this->sql=$query_str;
$this->rec_position=0;
@oci_execute(oci_parse($this->connection, "ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS'"));
$this->query = @oci_parse($this->connection, $query_str);
oci_execute($this->query)or die($this->get_error_msg($this->query ,"Query Error : ".$query_str));
while($r = @oci_fetch_array($this->query,OCI_ASSOC+OCI_RETURN_LOBS)){
$result[] = $r;
}
return $result;
}
function onwhile(){
while($r = @oci_fetch_array($this->query,OCI_ASSOC+OCI_RETURN_LOBS)){
$result[] = $r;
}
return $result;
}
function db_fetch_val()
{
$result=$this->db_fetch_array(0);
return $result[0];
}
function gen_id($table_name='',$field='',$increment='') {
if(empty($increment)) {
$increment=1;
} else {
$increment=$increment;
}
$sql="select nvl(max($field),0) + $increment from $table_name";
$this->db_query($sql);
return $this->db_fetch_val();
}
function db_fetch_array($fetch_type=0,$db="DEFAULT"){
$result=@oci_fetch_array($this->query,OCI_BOTH+OCI_RETURN_NULLS);
if(!is_array($result))
return false;
$this->total_field=OCINumCols($this->query);
if($db=="DEFAULT"){
foreach($result as $key=>$val){
$result[$key]=trim($val);
$result[$key]=trim(htmlspecialchars($val));
}
}
return $result;
}
function get_field_name($i){
return OCIColumnName($this->query, $i+1);
}
function get_num_fields() {
return @oci_num_fields($this->query);
}
function get_field_type($i, $sql=""){
return oci_field_type($this->query, $i+1);
}
function get_field_size($i, $sql=""){
return oci_field_size($this->query, $i+1);
}
function total_record(){
return oci_num_rows($this->query);
}
function free(){
@oci_free_statement($this->query);
@oci_close($this->connection);
unset($this);
}
function db_fetch_tr ($css="",$colname='y',$add='y',$update='y',$delete='y'){
if($css!=""){
$css_val="class=".$css;
}
if(!empty($colname)) {
echo "<tr $css_val>";
for ($i=0; $i< $this->get_num_fields(); $i++) {
echo "<td>".$this->get_field_name($i)."<td>";
}
//echo "<td>Update<td>Delete";
echo "</tr>";
}
while($result=$this->db_fetch_array(1)){
echo "<tr $css_val>";
for ($j=0; $j<$this->get_num_fields(); $j++) {
$cname=$this->get_field_name($j);
echo "<td>".$result[$cname]." <td>";
}
echo "</tr>";
}
}
function get_error_msg($error_no,$msg=""){
$log_msg=NULL;
$error_msg="Custom Error : <pre><font color=red>\n\t".ereg_replace(",",",\n\t",$msg)."</font></pre>";
$error_msg.="System generated Error :";
$error_msg.="<font color=red><pre>";
foreach(oci_error($error_no) as $key=>$val){
$log_msg.="$key : ".$val."\n";
$error_msg.="$key : $val \n";
}
$error_msg.="</pre></font>";
return $error_msg;
}
function get_error_msg_array($error_no){
return oci_error($error_no);
}
}
?>
Crie uma pasta com o mesmo nome do ORCL_SERVICE_NAME e crie o arquivo abaixo nesta pasta: (com isso você tem a mesma classe mas com conectores distintos, sem precisar configurar os TSNames do Oracle.)
sid.inc:
<?php
##############################
# #
# SID Config #
# Created By Roberta Brandao #
# robertanrbrandao@gmail.com #
##############################
$ORCL_HOST = '192.168.10.1';
$ORCL_USER_NAME = 'root';
$ORCL_PASSWORD = 'root';
$ORCL_SERVICE_NAME = 'TEST';
$ORCL_PORT = '1521';
$SID_VALUE = '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST='.$ORCL_HOST.')(PORT='.$ORCL_PORT.')))(CONNECT_DATA=(SERVICE_NAME='.$ORCL_SERVICE_NAME.')))';
?>
functions.class.php:
<?php
##############################
# #
# Functions Class #
# Created By Roberta Brandao #
# robertanrbrandao@gmail.com #
##############################
//start class
class ora_funcs {
var $conn;
function ora_funcs($sid){ // inicia uma instancia separada para a funcao
$this->conn = new ora_connect($sid);
}
# search_field(Query, Field_retornado, Tabela, Num de linhas retornado)
function search_field($query, $field, $table, $rows=0){
$connfunc = &$this->conn;
$query = trim($query);
//$query= addslashes($query);
$query = "SELECT $field FROM $table where ($query)";
if($rows!=0){
$query .= " AND ROWNUM <= $rows";
}
$connfunc->db_query($query);
if($connfunc->total_record()>1){ //if num_rows = 0 of the query, return false;
return $connfunc->onwhile();
} else {
return $connfunc->db_fetch_val();
}
} //end function search_field
function close(){
$connfunc = &$this->conn;
$connfunc->free();
}
}
?>
teste.php:
<?php
##############################
# #
# Arquivo de Teste #
# Created By Roberta Brandao #
# robertanrbrandao@gmail.com #
##############################
# declarando classes oracle
include('ora.class.php');
include('functions.class.php');
# instanciando classes
$conn = new ora_connect('TEST');//carrega classe com o SID TESTE. Note que esta é o nome da pasta onde está o sid.inc.
$ora_funcs = new ora_funcs('CONECTOR2'); //carrega classe de busca avançada. outro sid.inc em outra pasta
$conn = new ora_connect();
$query = 'select * from tblteste a where a.id not in (10,20,30)'; # <- nao colocar ";" (ponto e virgula) no fim da query.
$result = $conn->select($query);
$conn->free(); //close oracle
unset($conn); //destroi o objeto e libera memoria. (caso necessario)
//print_r($result); // deem uma olhada de como montei o array.
foreach($result as $res){
$ID = $res['id']; //ou
$TIPO = $ora_funcs->search_field("id = '$ID'", 'TIPO', 'CONECTOR2.TABELATESTE2', 1); //envia a query e nao desconecta da instancia
}
$ora_funcs->close(); //fecha a instancia da funcao
unset($ora_funcs);//destroi o objeto e libera memoria. (caso necessario)
?>
Novo Comentário: