Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/onidesk/public_html/blog/index.php on line 41

Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/onidesk/public_html/blog/index.php on line 48

Warning: strpos() [function.strpos]: needle is not a string or an integer in /home/onidesk/public_html/blog/index.php on line 61
Onidesk TI :: Blog Oficial - Acesso à base de dados via ODBC usando PHP
Acesso à base de dados via ODBC usando PHP 


ODBC (acrônimo para Open Data Base Connectivity) é um padrão para acesso a sistemas gerenciadores de base de dados.



Este padrão define um conjunto de interfaces que permitem o uso de linguagens de programação como Visual Basic, Delphi, Visual C++, entre outras capazes de utilizar estas interfaces, para ter acesso a uma vasta gama de bases de dados distintas sem a necessidade de codificar métodos de acesso especializados.



Usando o ODBC, através da sua (a do ODBC) implementação específica da linguagem SQL, a aplicação pode comunicar-se com a base de dados de forma transparente, permitindo, por exemplo, que um mesmo programa possa utilizar simultaneamente o MySQL, o Access e o SQL Server sem a necessidade de mudanças na sua camada de dados. Obviamente, o uso destas interfaces está condicionado à existência de drivers ODBC específicos para as bases de dados que se deseja acessar.

[wikipédia]



Veja como criar um ODBC database access wrapper com PHP.




<?php

/*
Autor : José Franco
Onidesk TI 
Publicada em 2006-11-11 10:56
*/
class odbc_conn
{
var 
$dns   "database";
var 
$user  "";
var 
$pwd   "";
var 
$table "clientes";
/*var $dbRoot= "C:\\Documents and
Settings\\Guto\\Os meus documentos\\db1.mdb;";*/
var $conn null

// método constructor

function odbc_conn()
{

#odbc_conn::dnsConf();    este metodo não está a funcionar ainda
odbc_conn::open_conn();    
}



// inicia o recurso de ligação
function open_conn()
{
$this->conn odbc_connect($this->dns,$this->user,$this->pwd);
if(!
is_resource($this->conn)){
$this->conn odbc_pconnect($this->dns,$this->user,$this->pwd);
}
if(
is_resource($this->conn))
return 
true;
else 
return 
false;        
}




// fecha a ligação existente com a base de dados
function close_conn()
{
return 
odbc_close($this->conn);
}


/*


Attempt to config DSN directly

function dnsConf()
{
$conf  = "DRIVER=Microsoft Access Driver (*.mdb);";
$conf .= "{$this->dbRoot}";
$conf .= "UserCommitSync=Yes;";
$conf .= "Threads=3;";
$conf .= "SafeTransactions=0;";
$conf .= "PageTimeout=5;";
$conf .= "MaxScanRows=8;";
$conf .= "MaxBufferSize=2048;";
$conf .= "DriverId=281;";
$conf .= "DefaultDir=C:/Programas/Ficheiros comuns/ODBC/Data Sources";
return $conf;

echo gettype($conf);
}

*/    



/**
*  executa um pedido à base de dados
*
* @param clausula $sql
* @return resource query ou bool false
*/
function exec_query($sql)
{
if(!empty(
$sql)){
$query odbc_exec($this->conn,$sql
or die(
"DATABASE QUERY ERROR "odbc_errormsg());
return 
$query;
echo 
gettype($query);
} else{ 
$this->close_conn();
return 
false;
}
}

/**
* Forma como o resultado é apresentado
*
* @param resource       $query
* @param marker         $marker
* @param number of rows $row_number
* @param array          $arr_data
* @return array/object/bool/int
*/
function fetch_data($query,
$marker=0,
$row_number=NULL,
$arr_data=NULL)
{
switch(
$marker){
case 
0:
$line odbc_fetch_array($query,$row_number);    
break;
case 
1:
$line odbc_fetch_object($query,$row_number);
break;
case 
2:
if(
$res_id==NULL)
print 
"Parameter $ res_id is needed";
else 
$line odbc_fetch_row($query,$row_number);
break;
case 
3:
$line odbc_fetch_into($query,$arr_data);    
default:
return 
false;
}
return 
$line;

}


/**
* Fornece o numero de colunas 
*
* @param resource $query
* @return int
*/

function num_rows($query)
{
$num odbc_num_rows($query);
if(
$num 0)
return 
$num;
else 
return 
false;
}

/**
* Fornece o numero de campos 
*
* @param resource $query
* @return int
*/
function num_fields($query)
{
$fields odbc_num_fields($query);
if(
$fields 0)
return 
$fields;
else 
return 
false;
}

/**
* Rollback a transaction

* @param  none
* @return bool
*/
function rollback()
{
if(
is_resource($this->conn))
return 
odbc_rollback($this->conn);
else 
return 
false;           
}


/**
* Commit an ODBC transaction

* @param  none
* @return bool
*/
function commit()
{
if(
is_resource($this->conn))
return 
odbc_commit($this->conn);
else 
return 
false;           
}


/**
* encerra todas as ligações ODBC existentes
*  
* @param none
* @return  void
*/
function unset_conn()
{
return 
odbc_close_all();

}




/**
* Fornece informação sobre a BD actual
*
* @param  int  $fecth_type
* @return array [db info]
*/

function db_info($fetch_type=1)
{
$info odbc_data_source($this->conn,$fetch_type);

foreach(
$info as $data)
{
$temp[] = $data;

}
return 
$temp;
}


/**
* Prepara e executa um pedido SQL
*
* @param sql clausule $query
* @return resource 
*/

function Prepare($query)
{
if(!empty(
$query) && is_resource($this->conn)){

$preExec odbc_do($this->conn,$query);
}

if(
is_resource($preExec))
return     
$preExec
else 
return 
false;
}





function 
go_next($query)
{
if(
is_resource($query)){
$next odbc_next_result($query);
}
return 
$next;
}


/**
* Devolve o nome do cursor para o recurso forcecido
*
* @param resource $query
* @return string [cursor_name]
*/
function get_cursor($query)
{
if(!empty(
$query) && is_resource($query))

return 
odbc_cursor($query);

else 
return 
false;


}

/**
* Permite manipular colunas longas
*
* @param resource $query
* @param int $length
* @return bool
*/

function handle_columns($query,$length,$mode)
{
if(
is_resource($query)&& is_int($length)){

switch(
$mode)
{
case 
'len':
$_mode =  odbc_longreadlen($query,$length);
break;
case 
'bin':
$_mode =  odbc_binmode($query,$length);
break;
default: 
return 
false;    

return 
$_mode;
}
}

/**
* Permite obter informações  acerca dos campos da tabela
*
* @param  resource $query
* @param  mix $value
* @param  string $mode
* @return mix [$handle]
*/

function handle_fields($query,$value,$mode)
{
switch(
$mode){

case 
'len':
$handle odbc_field_len($query,$value);    
break;
case 
'name':
$handle odbc_field_name($query,$value);
break;
case 
'num':
$handle odbc_field_num($query,$value);
break;
case 
'pres':
$handle odbc_field_precision($query,$value);
break;
case 
'scale':
$handle odbc_field_scale($query,$value);
break;
case 
'type':
$handle odbc_field_type($query,$value);
break;
default:
return 
false;                        
}
return 
$handle
}



/**
* Permite inserir os dados na tabela
*
* @param  array $fields
* @return resource $insert
*/
function Insert ($fields)
{
if(
is_array($fields))
{
foreach(
$fields as $rows => $values){
$arrRows[] = "".$rows."";
$arrValues[]= "'".$values."'";
}
$strRows implode(", "$arrRows);

$strValues implode(", "$arrValues);
}
$query =  "INSERT INTO ".$this->table."($strRows)
VALUES ($strValues);"
;

$insert $this->exec_query($query);

if(
$insert){
echo 
"Data inserted successfully !";
}
return 
$insert

}




/**
* Executa clausulas personalizadas 
* de actualização da base de dados

* @param  array $set
* @param  array $where
* @param  int $marker
* @return resource [update] $res
*/

function Update($set,$where=NULL,$marker)
{

foreach(
$set  as $data => $info)
{
$_data[] = $data." = "."'{$info}'";

}
$strRows implode(",",$_data);

switch(
$marker)
{

case 
0:
$update "UPDATE $this->table SET    {$strRows}";     
break;

case 
1:
foreach(
$where  as $rows => $_info)
{
$Rowsinfo[] = $rows."="."'{$_info}'";

}
$strWhere implode(","$Rowsinfo);


$update "UPDATE $this->table SET 
{$strRows} WHERE {$strWhere}"
;     

break;

default:

return 
false;        
}

$res $this->exec_query($update);

if(
is_resource($res)){
return 
$res;
}

}


/**
* Apaga os campos indicados pela clausula sql
*
* @param  pos where clausule $sql
* @return resource [delete]
*/

function delete($sql)
{
if(!empty(
$sql)){
$query "DELETE FROM ".$this->table." WHERE ".$sql;    
$del odbc_conn::Prepare($query);
}    
return 
$del;

}



/**
* Permite obter os resultados da tabela
*
* @param   string  $sql
* @param   array    $rows
* @param   int      $row_num
* @return  array    [results]
*/

function  results($sql)
{

$count 0;
$data = array();

$res =  odbc_conn::exec_query($sql);

while (
$row = @odbc_fetch_array($res)) {
$data[$count] = $row;
$count++;
}
@
odbc_free_result($res);
return 
$data;

}


/**
* Imprime os resultados numa tabela HTML
*
* @param string $sql
* @return unknown
*/
function TableResults($sql)
{
if(!empty(
$sql) && is_string($sql)){

$results =  odbc_conn::exec_query($sql);
}
return @
odbc_result_all($results);
}


/**
* Apaga a tabela informada 
*
* @return resource [$query]
*/

function DropTable($table)
{
return 
odbc_conn::exec_query("DROP TABLE {$table}");
}

//{{ Perquisar acerca destes métodos e implementálos
/*
function Create_Table($values)
{
foreach($values as $Rows => $Type)
{
$arrfields[] = $Rows;
$dataType[]  = $Type;
$arrValues[] = "".$Rows." ".$Type."";
}


$table = $values["TABLE"];
$arr_rows = implode(", ",$arrfields);
$fields = substr($arr_rows,10,strlen($arr_rows));
$strFields = implode(", ",$arrValues); 
$Fields = substr($strFields,strlen($table)+7,strlen($strFields));

#if($this->Check_Table($table)!=true){
$gen_table = $this->Exec_Query("CREATE TABLE ".$table." (".$Fields.")");
#}

return $gen_table;
}





function Check_Table($table)
{
$result = $this->exec_query("SELECT name FROM odbc_master
WHERE type='table' AND name='".$table."'");
if(odbc_conn::num_rows($result) > 0){
return true;
}
}


*/
//}}}


/**
* Tipo de dados suportado
*
* @return resource [#int]
*/

function DataType()
{
return 
odbc_gettypeinfo($this->conn);

}

// end of class

?>




Nota : Esta classe foi originalmente criada pela Onidesk TI,encontrando-se disponível para download no repositório PHP Classes
no endereço link relacionado abaixo











[ adic comentário ] ( 559 vistas )   |  [ 0 trackbacks ]   |  permalink  |  link relacionado  |   ( 3 / 423 )

<<Primeiro <Anterior | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Próximo> Último>>