Location: PHPKode > scripts > PDO_EXT > pdo_ext/class_pdo_extension.php
<?php
/*
// Oracle
define("RELDB", "oci"); // oci
define("DATABASE","pdo_ext");
define("HOST","localhost");
define("USER", "pdo_user");
define("PASSWORD", "*****");
define("OPTIONS", "");
*/
/*
// Postgres
#define("RELDB", "pgsql");//pgsql
#define("DATABASE","pdo_ext");
#define("HOST","localhost");
#define("USER", "pdo_user");
#define("PASSWORD", "*******");
define("OPTIONS", "");
*/
// mysql,
define("RELDB", "mysql"); //mysql
define("DATABASE","session");
define("HOST","localhost");
define("USER", "root");
define("PASSWORD", "");
define("OPTIONS", "");

class PDO_EXT extends PDO
{ 
/**
* Classe que extende a interface PDO 
* http://www.php.net/pdo
* @author Marcelo Soares da Costa
* @email phpmafia at yahoo dot com dot br
* @copyright Marcelo Soares da Costa © 2007. 
* @license FreeBSD http://www.freebsd.org/copyright/freebsd-license.html
* @version 1,2
* @access public
* @package PDO_EXT
* @subpackage 
* @data 2007-09-28
* @changelog Adicionado metodos getlinearray,getrow
*/ 
function __construct() {
$DSN=RELDB.":host=".HOST.";dbname=".DATABASE;
parent::__construct($DSN, USER, PASSWORD);
}
/**
*
* Metodo publico para setar a query
* Decide o metodo de acordo com o tipo de SQL
* @access public
* @input SQL {string}
* @return Obj
*
*/
public function setsql($sqlstring) 
{ 
if($sqlstring==null)
{
throw new Exception("O valor passado para a função setsql não pode ser nulo",1000);
}
  switch($this->__querytype($sqlstring))
  {
  case "select";
	 return $this->__selectquery($this->__sql);
	 break;
  case "update";
	 return $this->__conditionalquery($this->__sql);
	 break;
  case "delete";
	 return $this->__conditionalquery($this->__sql);
	 break;
	case "insert";
	 return $this->__insertquery($this->__sql);
	 break;
  default:
    throw new Exception("Query não suportada => ".$sqlstring."\r\n<br/> => para executar este tipo de query é necessário utilizar um gerenciador de banco de dados",1001);
      break;
  }
} 
/**
*
* Metodo privado para setar a query
* Retira caracteres proibidos e retorna o tipo de query
* @access private
* @input SQL {string}
* @return tipo de query {string}
*
*/
private function __querytype($sqlstring)
{
  unset($this->__sql);
	unset($this->querytype);

	$array_injection=array("#","--","\\","//",";","/*","*/","drop","truncate");
	
   $this->__sql=trim(str_replace($array_injection,"",strtolower($sqlstring)));
	 
   list($this->querytype)= explode(" ",$this->__sql);
   
   return $this->querytype;
}
/**
*
* Metodo privado para query do tipo SELECT
* Prepara e executa SELECT
* @access private
* @input SQL {string}
* @return Obj
*
*/
private function __selectquery($sqlstring)
{
   $this->select=parent::prepare($sqlstring);
   $this->select->execute();
   return $this->select;

}
/**
*
* Metodo privado para query condicionais
* Executa query condicionais para query UPDATE e DELETE
* @access private
* Retorna o numero de resultados afetados
* @input SQL {string}
* @return numero de resultados afetados, number of affected rows, {string}
*
*/
private function __conditionalquery($sqlstring)
{
	 
  if(stripos($sqlstring, 'where') == false)
  {
  throw new Exception("Eh necessário a clausula WHERE para => ".$sqlstring,1005);
  }
  try {
	$result=parent::exec($sqlstring);
	return $result;
      } catch (PDOException $e) {
	    return $e->getMessage();
      }
}
/**
*
* Metodo privado para query do tipo INSERT
* Executa query INSERT e retorna o ID inserido
* @access private
* Retorna o numero ID inserido
* @input SQL {string}
* @return lastInsertId {string}
*
*/ 
private function __insertquery($sqlstring)
{
  try {
  $sth=parent::prepare($sqlstring);
  $sth->execute();
  $this->lastInsertId=parent::lastInsertId();
  return $this->lastInsertId;
	} catch (PDOException $e) {
   return $e->getMessage();
}
}
/**
*
* Metodo publico para retornar um array associativo
* Verifica se a query e um SELECT e retorna um array associativo
* @access public
* @input
* @return array
*
*/
public function getassocarray()
{
	unset($this->rows);
	unset($this->results);
 if($this->querytype=="select")
 {
	$this->results = array();

	while ($this->rows = $this->select->fetchAll(PDO::FETCH_ASSOC))
   {
    $this->results=$this->rows;
   }
	 return $this->results;
 }else{
 throw new Exception("O método getassocarray é somente suportado em select",1010);
 }
}
/**
*
* Metodo publico para retornar uma linha com um array associativo
* Verifica se a query e um SELECT e retorna um array associativo
* @access public
* @input
* @return array
*
*/
public function getlinearray()
{
	unset($this->rows);
	unset($this->results);
 if($this->querytype=="select")
 {
	$this->results= $this->select->fetch();
 	return $this->results;
 }else{
 throw new Exception("O método getlinearray é somente suportado em select",1011);
 }
}
/**
*
* Metodo publico para retornar um resultado especifico de uma coluna
* Verifica se a query e um SELECT e retorna o valor de um campo
* @access public
* @input number ,optional array[key]
* @return string (array[key]=>value)
*
*/
public function getrow($row=0)
{
 if($this->querytype=="select")
 {	
	return $this->select->fetchColumn($row);
 }else{
 throw new Exception("O método getrow é somente suportado em select",1012);
 }
}
/**
*
* Metodo publico para carregar uma sequencia de sql em array
* @access public
* Uso combinado com a funcao transaction
* Especifico para transacoes simples de insert ou update
* @input
* @return 
*
*/
public function addsql($sql) 
{ 
	$this->__sqltrans[] = $sql; 
} 
/**
*
* Metodo publico para executar uma transacoes simples de insert ou update
* @access public
* Uso combinado com a funcao addsql
* @input
* @return 
*
*/
public function transaction()
{
//var_export($this->__sqltrans);die();
if(is_array($this->__sqltrans))
  {
try {
  $this->transactionsql=parent::beginTransaction();
  foreach($this->__sqltrans as $sqlexec)
  {
  $this->transactionsql->exec($sqlexec);
  }
  $this->transactionsql=parent::commit();
  unset($this->__sqltrans);
  return $this->transactionsql;
   } catch (Exception $e) {
  parent::rollBack();
  return $e->getMessage();
   }
  }else{
  throw new Exception("Para efetuar uma transacao simples passe multiplos SQL com $objeto->addsql($sql)",1015);
  }
}

# FIM DA CLASSE
}

class PDOStatement_EXT extends PDOStatement {
}

/*
# Exemplo de uso
$SQL="SELECT * FROM table";
$teste = new PDO_EXT;
$teste->setsql($SQL); 
var_export($teste->getassocarray());
*/
Return current item: PDO_EXT