msmarins 2 Denunciar post Postado Dezembro 5, 2016 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
AndersonMamede 88 Denunciar post Postado Dezembro 6, 2016 Habilite as mensagens de erro do PHP adicionando estas duas linhas no início do arquivo onde você cria os objetos e chama a função Inserir: <?php ini_set("display_errors", 1); error_reporting(E_ALL|E_STRICT); Compartilhar este post Link para o post Compartilhar em outros sites
LaerteDias 17 Denunciar post Postado Dezembro 6, 2016 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 Compartilhar este post Link para o post Compartilhar em outros sites
msmarins 2 Denunciar post Postado Dezembro 7, 2016 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
msmarins 2 Denunciar post Postado Dezembro 7, 2016 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