Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
conexao.class.php
<?php /* * Constantes de parâmetros para configuração da conexão */ define('HOST', 'localhost'). define('DBNAME', 'banco_de_dados'). define('CHARSET', 'utf8'). define('USER', 'root'). define('PASSWORD', ''). class Conexao { /* * Atributo estático para instância do PDO */ private static $pdo. /* * Escondendo o construtor da classe */ private function __construct() { // } /* * Método estático para retornar uma conexão válida * Verifica se já existe uma instância da conexão, caso não, configura uma nova conexão */ public static function getInstance() { if (!isset(self::$pdo)) { try { $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_PERSISTENT => TRUE). self::$pdo = new PDO("mysql:host=". HOST. ". dbname=". DBNAME. ". charset=". CHARSET. ". ", USER, PASSWORD, $opcoes). self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION). } catch (PDOException $e) { print "Erro: ". $e->getMessage(). } } return self::$pdo. } }?><?php header('Content-Type: text/html. charset=utf-8'). class Crud{ // Atributo para guardar uma conexão PDO private $pdo = null. // Atributo onde será guardado o nome da tabela private $tabela = null. // Atributo estático que contém uma instância da própria classe private static $crud = null. /* * Método privado construtor da classe * @param $conexao = Conexão PDO configurada * @param $tabela = Nome da tabela */ private function __construct($conexao, $tabela=NULL){ if (!empty($conexao)): $this->pdo = $conexao. else: echo "<h3>Conexão inexistente!</h3>". exit(). endif. if (!empty($tabela)) $this->tabela =$tabela. } /* * Método público estático que retorna uma instância da classe Crud * @param $conexao = Conexão PDO configurada * @param $tabela = Nome da tabela * @return Atributo contendo instância da classe Crud */ public static function getInstance($conexao, $tabela=NULL){ // Verifica se existe uma instância da classe if(!isset(self::$crud)): try { self::$crud = new Crud($conexao, $tabela). } catch (Exception $e) { echo "Erro ". $e->getMessage(). } endif. return self::$crud. } /* * Método para setar o nome da tabela na propriedade $tabela * @param $tabela = String contendo o nome da tabela */ public function setTableName($tabela){ if(!empty($tabela)){ $this->tabela = $tabela. } } /* * Método privado para construção da instrução SQL de INSERT * @param $arrayDados = Array de dados contendo colunas e valores * @return String contendo instrução SQL */ private function buildInsert($arrayDados){ // Inicializa variáveis $sql = "". $campos = "". $valores = "". // Loop para montar a instrução com os campos e valores foreach($arrayDados as $chave => $valor): $campos.= $chave. ', '. $valores.= '?, '. endforeach. // Retira vírgula do final da string $campos = (substr($campos, -2) == ', ')? trim(substr($campos, 0, (strlen($campos) - 2))): $campos. // Retira vírgula do final da string $valores = (substr($valores, -2) == ', ')? trim(substr($valores, 0, (strlen($valores) - 2))): $valores. // Concatena todas as variáveis e finaliza a instrução $sql.= "INSERT INTO {$this->tabela} (". $campos. ")VALUES(". $valores. ")". // Retorna string com instrução SQL return trim($sql). } /* * Método privado para construção da instrução SQL de UPDATE * @param $arrayDados = Array de dados contendo colunas, operadores e valores * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE * @return String contendo instrução SQL */ private function buildUpdate($arrayDados, $arrayCondicao){ // Inicializa variáveis $sql = "". $valCampos = "". $valCondicao = "". // Loop para montar a instrução com os campos e valores foreach($arrayDados as $chave => $valor): $valCampos.= $chave. '=?, '. endforeach. // Loop para montar a condição WHERE foreach($arrayCondicao as $chave => $valor): $valCondicao.= $chave. '? AND '. endforeach. // Retira vírgula do final da string $valCampos = (substr($valCampos, -2) == ', ')? trim(substr($valCampos, 0, (strlen($valCampos) - 2))): $valCampos. // Retira vírgula do final da string $valCondicao = (substr($valCondicao, -4) == 'AND ')? trim(substr($valCondicao, 0, (strlen($valCondicao) - 4))): $valCondicao. // Concatena todas as variáveis e finaliza a instrução $sql.= "UPDATE {$this->tabela} SET ". $valCampos. " WHERE ". $valCondicao. // Retorna string com instrução SQL return trim($sql). } /* * Método privado para construção da instrução SQL de DELETE * @param $arrayCondicao = Array de dados contendo colunas, operadores e valores para condição WHERE * @return String contendo instrução SQL */ private function buildDelete($arrayCondicao){ // Inicializa variáveis $sql = "". $valCampos= "". // Loop para montar a instrução com os campos e valores foreach($arrayCondicao as $chave => $valor): $valCampos.= $chave. '? AND '. endforeach. // Retira a palavra AND do final da string $valCampos = (substr($valCampos, -4) == 'AND ')? trim(substr($valCampos, 0, (strlen($valCampos) - 4))): $valCampos. // Concatena todas as variáveis e finaliza a instrução $sql.= "DELETE FROM {$this->tabela} WHERE ". $valCampos. // Retorna string com instrução SQL return trim($sql). } /* * Método público para inserir os dados na tabela * @param $arrayDados = Array de dados contendo colunas e valores * @return Retorna resultado booleano da instrução SQL */ public function insert($arrayDados){ try { // Atribui a instrução SQL construida no método $sql = $this->buildInsert($arrayDados). // Passa a instrução para o PDO $stm = $this->pdo->prepare($sql). // Loop para passar os dados como parâmetro $cont = 1. foreach ($arrayDados as $valor): $stm->bindValue($cont, $valor). $cont++. endforeach. // Executa a instrução SQL e captura o retorno $retorno = $stm->execute(). return $retorno. } catch (PDOException $e) { echo "Erro: ". $e->getMessage(). } } /* * Método público para atualizar os dados na tabela * @param $arrayDados = Array de dados contendo colunas e valores * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE - Exemplo array('$id='=>1) * @return Retorna resultado booleano da instrução SQL */ public function update($arrayDados, $arrayCondicao){ try { // Atribui a instrução SQL construida no método $sql = $this->buildUpdate($arrayDados, $arrayCondicao). // Passa a instrução para o PDO $stm = $this->pdo->prepare($sql). // Loop para passar os dados como parâmetro $cont = 1. foreach ($arrayDados as $valor): $stm->bindValue($cont, $valor). $cont++. endforeach. // Loop para passar os dados como parâmetro cláusula WHERE foreach ($arrayCondicao as $valor): $stm->bindValue($cont, $valor). $cont++. endforeach. // Executa a instrução SQL e captura o retorno $retorno = $stm->execute(). return $retorno. } catch (PDOException $e) { echo "Erro: ". $e->getMessage(). } } /* * Método público para excluir os dados na tabela * @param $arrayCondicao = Array de dados contendo colunas e valores para condição WHERE - Exemplo array('$id='=>1) * @return Retorna resultado booleano da instrução SQL */ public function delete($arrayCondicao){ try { // Atribui a instrução SQL construida no método $sql = $this->buildDelete($arrayCondicao). // Passa a instrução para o PDO $stm = $this->pdo->prepare($sql). // Loop para passar os dados como parâmetro cláusula WHERE $cont = 1. foreach ($arrayCondicao as $valor): $stm->bindValue($cont, $valor). $cont++. endforeach. // Executa a instrução SQL e captura o retorno $retorno = $stm->execute(). return $retorno. } catch (PDOException $e) { echo "Erro: ". $e->getMessage(). } } /* * Método genérico para executar instruções de consulta independente do nome da tabela passada no _construct * @param $sql = Instrução SQL inteira contendo, nome das tabelas envolvidas, JOINS, WHERE, ORDER BY, GROUP BY e LIMIT * @param $arrayParam = Array contendo somente os parâmetros necessários para clásusla WHERE * @param $fetchAll = Valor booleano com valor default TRUE indicando que serão retornadas várias linhas, FALSE retorna apenas a primeira linha * @return Retorna array de dados da consulta em forma de objetos */ public function getSQLGeneric($sql, $arrayParams=null, $fetchAll=TRUE){ try { // Passa a instrução para o PDO $stm = $this->pdo->prepare($sql). // Verifica se existem condições para carregar os parâmetros if (!empty($arrayParams)): // Loop para passar os dados como parâmetro cláusula WHERE $cont = 1. foreach ($arrayParams as $valor): $stm->bindValue($cont, $valor). $cont++. endforeach. endif. // Executa a instrução SQL $stm->execute(). // Verifica se é necessário retornar várias linhas if($fetchAll): $dados = $stm->fetchAll(PDO::FETCH_OBJ). else: $dados = $stm->fetch(PDO::FETCH_OBJ). endif. return $dados. } catch (PDOException $e) { echo "Erro: ". $e->getMessage(). } } }?> Estou tendo um problema para inserir os dados na tabela contatos, o insert está entendendo que eu quero conectar na tabela usuarios e na verdade eu quero usar a tabela contatos A mensagem de erro que eu recebo é de que a coluna assunto não existe, justamente pq a coluna assunto é da tabela contatos e ele entende que eu quero inserir na tabela usuarios <?php$pdo = Conexao::getInstance(). $tabela = 'usuarios'. $crud = Crud::getInstance($pdo, $tabela). / CONSULTA /$sql = "SELECT * FROM ".$tabela." WHERE id =?". $arrayParam = array($id). $dados = $crud->getSQLGeneric($sql, $arrayParam, FALSE). / INSERT /$tabela = 'contatos'. $crud = Crud::getInstance($pdo, $tabela). $contato = array("nome"=>dados->nome,"telefone"=>dados->telefone,"assunto"=>"teste","email"=>dados->email). $crud->insert($contato).?>Carregando comentários...