Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

msmarins

problema com uma classe de insert / CRUD-PDO

Recommended Posts

Olá, saudações.

Adaptei um CRUD com PDO para postagens de matérias.

No servidor remoto funciona mas no local (WAMP SERVER) a classe Insert não altera o BD.

include_once 'Conexao.class.php';

class ServiceDb {

    private $db;
    private $entity;

    public function __construct(EntidadeInterface $entity) {
        $this->db = new Conexao();
        $this->entity = $entity;
    }

    public function Inserir($atributos) {
        $keys = implode(",", array_keys($atributos));
        $junta = ":" . implode(",:", array_keys($atributos));
        $separa = explode(",", $junta);
        $campos = "(" . $keys . ") VALUES (" . $junta . ")";
        $query = "INSERT INTO {$this->entity->getTable()} " . $campos;
        $combinaAray = array_combine($separa, array_values($atributos));
        $stmt = $this->db->prepare($query);

        if ($stmt->execute($combinaAray)) {
            return true;
        } else {
            echo "<script> alert ('" . Error::class . "'); </script>;";
            echo "<script> alert ('Houve um problema ao tentar fazer a publicação.'); </script>";
            echo "<script>window.location = '../destaques/index.php';</script>";
        }
    }
}

Na pagina que que crio os objetos fica assim:

        $dados = array("responsavel" => $resp, "data_registro" => $nova_data);
        $dest = new Destaque();
        $exec = new ServiceDb($dest);
        $exec->Inserir($dados) 

$dados: é o array manda as informações para variável $atributo da classe Inserir.

$dest: cria a instância da classe Destaque que passa a tabela a ser alterada (Destaque.class.php).

$exec: cria a instância da classe ServiceDb (ServiceDb.class.php).

Conexao.class.php:

class Conexao extends PDO {

    private $host = 'mysql:host=localhost;dbname=teste_2';
    private $user = 'root';
    private $pass = '';
    private $pdo = NULL;

    function __construct() {
        try {
            if ($this->pdo == NULL) {
                $obj_pdo = parent::__construct($this->host , $this->user , $this->pass , array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                $this->pdo = $obj_pdo;
                return $this->pdo;
            }
        } catch (PDOException $erro) {

            echo 'Conexão Falhou:' . $erro->getMessage();
            return false;
        }
    }

    function __destruct() {
        $this->pdo = NULL;
    }

}

Alguém saberia porque não funciona localmente?

Compartilhar este post


Link para o post
Compartilhar em outros sites
echo "<script> alert ('" . $stmt->errorCode():. "'); </script>;";
            echo "<script> alert ('Houve um problema ao tentar fazer a publicação.'); </script>";
            echo "<script>window.location = '../destaques/index.php';</script>";

use a função errorCode:http://php.net/manual/pt_BR/pdostatement.errorcode.php

Olá meu amigo, bom dia!

O "$stmt->errorCode()" retornou 01000.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa pessoal!

O SQl não estava aceitando os campos da tabela como "não nulos".

Então ou teria que setar todos os campos ou colocar todos os campos como NULL.

No entanto pesquisei que poderia mudar o as variáveis do servidor e configurações. Tive de retirar o termo "STRICT_TRANS_TABLES" no sql mode. Esta funcionando agora, mas sinceramente não sei o que isso faz ou deixa de fazer de fato.

Funcionou mas fiquei meio cabreiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.