Ir para conteúdo

POWERED BY:

Arquivado

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

Eduardo Giullyanny

CLASS Fabrica extendendo PDO

Recommended Posts

Bom dia amigos;

 

Troque de sistema operacional, do win7 para o win8, eu usava o php5.3 que não consegui fazer funcionar no win8 64bits que tenho, mas instalei o 5.6, estava tudo normal até fazer uma conexão com o bd, deu erro falando que "mysql_conect" não era uma função conhecida. Ainda sim tudo bem, peguei uma função que utilizava em PDO, mas agora aparece o seguinte erro: could not find driver.

 

Pesquisei um monte para achar algo que me resolvese, mas uns não tem respostas outros fala que é erro de sintax, e poe um codigo semelhante, mas que eu peguei e deu a mesma coisa.

 

Bom vou falar o que eu tenho, baixei o php5.6, e o apache 2.4.10 e estão modulados, as unicas configurações que fiz foi no php.ini short_open_tags = on, e o asp também on. No apache apenas coloquei para chamar a index.php primeiro e o modrewire. Também deu uma verificada nas extension e vim que o php_pdo_mysql estava descomentado, mas ainda continua dando o erro, eu instanciei a classe Fabrica() para ver se estava bem.

<?php

class Fabrica extends PDO {

    private $dsn = 'mysql:dbname=uni;host=127.0.0.1';
    private $user = 'root';
    private $password = '';
    public $handle = null;

    function __construct() {
        try {
            if ($this->handle == null) {
                $dbh = parent::__construct($this->dsn, $this->user, $this->password);
                $this->handle = $dbh;
                return $this->handle;
            }
        } catch (PDOException $e) {
            echo 'ERROR 0: ' . $e->getMessage();
            return false;
        }
    }

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

}

new Fabrica();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo tendo descomentado a extensão, tem que verificar se ela está ativa, pode usar a seguinte função:

print_r(PDO::getAvailableDrivers());

Um segundo detalhe, é a sua implementação. Você está usando herança onde não confere o conceito de herança.

Uma fábrica não é uma conexão ela usa uma conexão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso significa que não possui driver para PDO. Se está usando windows, verifique na pasta ext se possui a DLL php_pdo_mysql.dll

Compartilhar este post


Link para o post
Compartilhar em outros sites

peguei este exemplo direto do site do php.net:

<?php

class PDOConfig extends PDO {

    private $engine;
    private $host;
    private $database;
    private $user;
    private $pass;

    public function __construct() {
        $this->engine = 'mysql';
        $this->host = 'localhost';
        $this->database = 'unifaj';
        $this->user = 'root';
        $this->pass = '';
        $dns = $this->engine . ':dbname=' . $this->database . ";host=" . $this->host;
        try {
            parent::__construct($dns, $this->user, $this->pass);
        } catch (Exception $ex) {
            echo $ex;
        }
    }

}
new PDOConfig;

não deu tb, o erro é o seguinte:

 

exception 'PDOException' with message 'could not find driver' in C:\Apache24\htdocs\sysunifaj\negocios\lib\Fabrica.php:19 Stack trace: #0 C:\Apache24\htdocs\sysunifaj\negocios\lib\Fabrica.php(19): PDO->__construct('mysql:dbname=un...', 'root', '') #1 C:\Apache24\htdocs\sysunifaj\negocios\lib\Fabrica.php(26): Fabrica->__construct() #2 {main}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem sair do foco principal, busque por outros arquivos php.ini dentro do seu servidor. Algumas vezes, há mais de um.

 

Agora, sobre o exemplo, não discutirei o fato dele estar no manual do PHP, sendo que está na parte de comnetários que é aberto ao público. Não é porque é o mais votado que é o melhor, se for ver, o segundo exemplo faz muito mais sentido que o primeiro.

 

http://php.net/manual/en/class.pdo.php#106125

 

Procure mais sobre Injeção de Dependência

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estava dando uma olhada no phpinfo e vi lá em PDO que num tem nada lá. Veja aqui, é um pdf com as configurações do meu php, mas num sei onde e como posso habilitar isso no php 5.6

 

Tinha um outro php.ini dentro da pasta windows, mas foi eu que coloquei lá por conta dos testes que eu fazia, não deu certo, aproveitei e apaguei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que não estou conseguindo fazer isso, já fiz tudo que acho que pode ser feito.

 

Preciso realmente de uma mão, estou apanhando feio, o que fala ali para fazer é dês-comentar a linha, isso já esta feito.


para falar a verdade estou a uns 3 dias tentando resolver esta problema, acho que meu celebro fritou, procurando alguma coisa para resolver isso, para que eu tivesse certeza que o erro não fosse o codigo, então baixei o phpmyadmin e tentei logar e não deu certo tb.

 

10X1 para o PHP5.6 aqui agora

 

tentei até com o mysqli, e se você adivinhar o que deu, pode ser a configuração do meu php, eu acabei de disponibilizar aqui agora o php.ini(aqui), poderia dar uma olhada e me dizer o que foi que o pdo não funciona?

$db = new mysqli('localhost', 'root', '', 'unifaj');

$query = "SELECT * FROM sys_grupos";

$res = $db->query($query);

while ($l = $res->fetch_object()) {
    echo "{$l->id} {$l->nome}<br>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você procurou dentro das pastas do PHP outros arquivos php.ini, isso é muito comum de acontecer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite amigos;

 

voltei pois consegui resolver... o mais interessante é como nós perdemos a coisas tão simples que acabamos nos apegando ao nosso código, mas vamos lá:

 

na imagem abaixo se perceberem na linha 734 e 736 tem a mesma escrita, o que havia de diferente é que na primeira linha(734) o valor era "./" e o valor da linha 736 era "ext", o que pedia para alterar no tuto que citei acima é que alterássemos o valor, mas não dizia se era o primeiro ou o segundo, eu permaneci com as duas linhas dês-comentadas e com valores diferentes, o primeiro era "./" e a segunda c o valor que esta ai mesmo, agora mesmo com as duas com o mesmo valor e ativas vão falhar, ao menos no meu falhou.

 

Obrigado aos que tentaram ajudar, mas o erro foi eu querer fazer com pressa e não prestar atenção no que eu faço... Obrigado...

 

imagen.jpg

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.