Avaliação de código
Vou colocar aqui o código que criei para conexão e consulta no banco de dados, gostaria de algumas dicas no que pode ser melhorado ou no que não deve ser utilizado, ou se a maneira como estou fazendo está errada.
Primeiro uma classe de conexão com o database, utilizado Singleton:
<?php
require_once(dirname(dirname(__FILE__)).'/funcoes.php');
protegeArquivo(basename(__FILE__));
class Connect{
// Armazena uma instancia MySQLi
/**
* $instance
* propriedade privada para armazenar uma instancia da classe
*
* @var static
*/
private static $instance;
/**
* Construtor da classe
* privado e sem ação para evitar acesso direto
*
* @param void
* @return void
*/
private function __construct(){ }
/**
* Clone
* Não deixar clonar a classe
*
* @param void
* @trigger_error se der erro
*/
private function __clone(){
trigger_error("Operação não permitida!");
}
/**
* Conn
* Confere as variaveis de conexão com o banco, se estiverem configuradas,
* faz a conexão com o banco de dados com singleton
*
* @param void
* @return instance se não der erro
* @Exception se der erro
*/
public static function conn(){
/**
* $database_config
* propriedade privada para armazenar as configurações do Banco de Dados
*
* @var array
*/
$database_config[0] = defined("DBHOST") ? DBHOST : "";
$database_config[1] = defined("DBUSER") ? DBUSER : "";
$database_config[2] = defined("DBPASS") ? DBPASS : "";
$database_config[3] = defined("DBNAME") ? DBNAME : "";
if(is_array($database_config) or !in_array("", $database_config))
{
// Cria uma instancia desta classe se ela não existir
if(!isset(self::$instance))
{
self::$instance = new MySQLi($database_config[0], $database_config[1], $database_config[2], $database_config[3]);
if(self::$instance->connect_error)
{
throw new Exception('Falha na conexão com banco de dados: ' . self::$instance->connect_error);
}
}
// Retorna uma instancia desta classe
return self::$instance;
}else{
throw new Exception('Arquivo de configuração inexistente: ' . self::$instance->connect_error);
}
}
}
Agora a classe de queries do database:
<?php
require_once(dirname(dirname(__FILE__)).'/funcoes.php');
protegeArquivo(basename(__FILE__));
class Queries{
/**
* $mysqli
* propriedade privada para armazenar uma instancia da classe mysqli
*
* @var private
*/
private $mysqli;
/**
* Construtor da classe
* Conecta com o banco de dados, armazenando a instancia deste em $mysqli
*
* @param void
* @return void
*/
public function __construct(){
$this->mysqli = Connect::conn();
}
/**
* Consulta
*
* @param string $sql
* @return mysqli_result Object
* @return mysqli_result affected_rows
*/
public function query($sql)
{
try{
$result = $this->mysqli->query($sql);
} catch (Exception $e) {
throw new Exception($e);
}
if(substr(trim(strtolower($sql)), 0, 6) == 'select'){
return $result;
}else{
return $this->mysqli->affected_rows;
}
}
public function selectALL($tabela){
$sql = "SELECT * FROM $tabela";
try{
return $this->query($sql);
}catch (Exception $e) {
throw new Exception($e);
}
}
public function inserir($tabela, $campos_valores){
$sql = "INSERT INTO ".$tabela." (";
for($i = 0; $i < count($campos_valores); $i++){
$sql .= key($campos_valores);
if($i < (count($campos_valores)-1)){
$sql .= ", ";
}else{
$sql .= ") ";
}
next($campos_valores);
}
reset($campos_valores);
$sql .= "VALUES (";
for($i = 0; $i < count($campos_valores); $i++){
$sql .= is_numeric($campos_valores[key($campos_valores)]) ?
$campos_valores[key($campos_valores)] :
"'". $campos_valores[key($campos_valores)] ."'";
if($i < (count($campos_valores)-1)){
$sql .= ", ";
}else{
$sql .= ") ";
}
next($campos_valores);
}
try{
return $this->query($sql);
}catch (Exception $e) {
throw new Exception($e);
}
}
public function deletar($tabela, $campoPk, $valorPk){
$sql = "DELETE FROM ".$tabela;
$sql .= " WHERE ".$campoPk."=";
$sql .= is_numeric($valorPk) ? $valorPk : "'".$valorPk."'";
try{
return $this->query($sql);
}catch (Exception $e) {
throw new Exception($e);
}
}
public function atualizar($tabela, $campos_valores, $campoPk, $valorPk, $extra = NULL){
$sql = "UPDATE ".$tabela." SET ";
for($i = 0; $i < count($campos_valores); $i++){
$sql .= key($campos_valores) . "=";
$sql .= is_numeric($campos_valores[key($campos_valores)]) ?
$campos_valores[key($campos_valores)] :
"'". $campos_valores[key($campos_valores)] ."'";
if($i < (count($campos_valores)-1)){
$sql .= ", ";
}else{
$sql .= " ";
}
next($campos_valores);
}
$sql .= "WHERE ".$campoPk."=";
$sql .= is_numeric($valorPk) ? $valorPk : "'".$valorPk."'";
if($extra != NULL){
$sql .= $extra;
}
try{
return $this->query($sql);
}catch (Exception $e) {
throw new Exception($e);
}
}
public function last_insert_id(){
return $this->mysqli->insert_id;
}
public function retornaDados($result, $tipo = NULL){
switch(strtolower($tipo)){
case "array" :
return $result->fetch_array();
break;
case "assoc" :
return $result->fetch_assoc();
break;
case "object" :
return $result->fetch_object();
break;
default:
return $result->fetch_object();
break;
}
}
}Discussão (9)
Carregando comentários...