Ir para conteúdo

POWERED BY:

Arquivado

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

uiLhian

Class de 'Conexão'

Recommended Posts

quais funções dependem? cita umas ai.

@ no codigo parece bad smell, como vc disse reescrever o codigo é a solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O driver "nativo" do MySQL para PHP (as famosas funções mysql_*) será removido do PHP em versões futuras. Se não me engano, já está marcado como deprecated.

 

Utilize a extensão MySQLi ou PDO no seu lugar.

 

Quanto ao seu exemplo de código, não tem como usar essa classe com a sua estrutura, você precisa reescrever tudo.

Está faltando coisa aí também, enfim, creio que você não entendeu direito como funciona.

 

Sugiro que dê uma olhada aqui:

:seta: http://henriquebarcelos.in/blog/2012/08/20/php-oo-classe-simples-para-acesso-a-banco-de-dados/

 

É o mais simples possível.

 

 

então peguei ele e fui tenta adaptar o código e me retorno o seguinte erro:

 

Parse error
: syntax error, unexpected T_PUBLIC in
D:\WebServer\inc\conexao2.php
on line
8

 

conexao2.php

 

<?php
class Db_Driver {
private $connector;
private static $defaultConnector;


public function __construct(MySQLi $conexao = null) {
$this->connect($conexao);
public static setDefaultConnector(MySQLi $conexao) {
self::$defaultConnector = $conexao;
public static getDefaultConnector() {
return self::$defaultConnector;
}
public function connect(MySQLi $conexao = null) {
if(!$this->isConnected()) {
if($conexao === null) {
if(self::$defaultConnector === null) {
throw new Exception('Não existe nenhum conector com o banco de dados!');
} else { $conexao = self::$defaultConnector; }
}
$this->connector = $conexao;
}
}
public function disconnect() {
if($this->isConnected()) {
$this->connector->close();
$this->connector = null;
}
}
public function isConnected() {
return $this->connector instanceof MySQLi;
}
public function getConnector() {
$this->connect();
return $this->connector;
}
public function query($sql) {
$this->connect();
$result = $this->connector->query($sql);
if(!$result) {
throw new Exception("Erro SQL #{$this->connector->errno}:{$this->connector->error}");
}
return $result;
}
public function fetch($sql) {
$result = $this->query($sql);
return $result->fetch_assoc();
}
public function fetchAll($sql) {
$data = array();
$result = $this->query($sql);
while($cursor = $result->fetch_assoc()) {
$data[] = $cursor;
}
return $data;
}
public function lastId() {
return $this->connector->insert_id;
}
}
}
}
?>

index.php

 

 

<div id="dados">
<?php
require_once("inc/config.php");

$query_str = $driver->fetchAll("SELECT COUNT(*) as cont FROM teste WHERE ID_PASTA = 0");
$query = var_dump($query_str);
$quant_resul = 8;
$pagina = 1;
$paginas = ceil($query['count'] / $quant_resul);
$result = $driver->fetchAll("SELECT *FROM teste LIMIT 0 , " . $quant_resul);

$x = 1;

mysql_close($conexao);

while($query_array = mysql_fetch_assoc($result)){
echo "<div class='thumb'><a class='OBRA_".$x."' href='javascript:void(0);' onclick=\"javascript:exibeImagens(".$query_array['ID'].",".$x.");\"><img src='thumb.php?img=img/".$query_array['IMAGEM']."' /></a></div>";
$x++;
};
include('pag_indice.php');
?>
</div>

config.php

 

<?php
$conexao = new MySQli('localhost', 'root', '', 'bancoteste');
Db_Driver::setDefaultConnector($conexao);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá próxima vez, indente o código, fica porco desta forma.

 

Uma dica: o PHP quase sempre diz o arquivo e a linha do problema, veja:

 

Parse error: syntax error, unexpected T_PUBLIC in D:\WebServer\inc\conexao2.php on line 8

 

Linha 8, do arquivo conexao2.php:

 

public function __construct(MySQLi $conexao = null) {
$this->connect($conexao);
public static setDefaultConnector(MySQLi $conexao) {
self::$defaultConnector = $conexao;
public static getDefaultConnector() {
return self::$defaultConnector;
}

 

Você definiu o método setDefaultConnector dentro do construct. E para que diabos vc está usando static?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sua adaptação ficou mal feita porque você comeu os fechos de chaves de cada método da classe.

 

Classes são diferentes de um IF que você pode suprimir a chave caso a o corpo dele contenha uma declaração simples de uma linha.

 

E um adendo! Isso de que hospedagens gratuitas ainda oferecerem PHP 4 só deve ser realidade aqui nos Brasil, dos quase extintos servidores de caridade porque lá fora tem hosts gratuitos decentes com no mínimo PHP 5.2.

 

É dureza que não dá pra hospedar uma aplicação que rode com algum framework moderno por causa dos namespaces, mas pelo menos um OOP levemente decente já rola.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sua adaptação ficou mal feita porque você comeu os fechos de chaves de cada método da classe.

 

Classes são diferentes de um IF que você pode suprimir a chave caso a o corpo dele contenha uma declaração simples de uma linha.

 

E um adendo! Isso de que hospedagens gratuitas ainda oferecerem PHP 4 só deve ser realidade aqui nos Brasil, dos quase extintos servidores de caridade porque lá fora tem hosts gratuitos decentes com no mínimo PHP 5.2.

 

É dureza que não dá pra hospedar uma aplicação que rode com algum framework moderno por causa dos namespaces, mas pelo menos um OOP levemente decente já rola.

 

Cara, php 5.4, arrays simples, traits, mais performático, session handler em uma classe, isso tudo já está faz 1 ano no PHP. E não quebra compatibilidade com as coisas, cadê hospedagem compartilhada implementando isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom eu simplesmente peguei o código desse site http://henriquebarce...banco-de-dados/ pra tentar usar como conexao pois ja que falaram que essa minha primeira classe que passei ta "ultrapassada" e "incompleta".

só que ta dando o erro:

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in D:\WebServer\conexao2.php on line 9

 

e deixei o código original:

 

 

class Db_Driver {
private $connector;
private static $defaultConnector;


public function __construct(MySQLi $conn = null) {
$this->connect($conn);
}


public static setDefaultConnector(MySQLi $conn) {
self::$defaultConnector = $conn;
}


public static getDefaultConnector() {
return self::$defaultConnector;
}


public function connect(MySQLi $conn = null) {
if(!$this->isConnected()) {
if($conn === null) { 
if(self::$defaultConnector === null) {
throw new Exception('Não existe nenhum conector 
com o banco de dados!');
} else {
$conn = self::$defaultConnector;
}
}
$this->connector = $conn;
}
}


public function disconnect() {
if($this->isConnected()) {
$this->connector->close();
$this->connector = null;
}
}


public function isConnected() {
return $this->connector instanceof MySQLi;
}


public function getConnector() {
$this->connect();
return $this->connector;
}


public function query($sql) {
$this->connect();
$result = $this->connector->query($sql);
if(!$result) {
throw new Exception("Erro SQL #{$this->connector->errno}: 
{$this->connector->error}");
}
return $result;
}


public function fetch($sql) {
$result = $this->query($sql);
return $result->fetch_assoc();
}


public function fetchAll($sql) {
$data = array();
$result = $this->query($sql);
while($cursor = $result->fetch_assoc()) {
$data[] = $cursor;
}
return $data;
}


public function lastId() {
return $this->connector->insert_id;
}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

---

 

Melhorias que eu faria, e fiz:

 

<?php
class Db_Driver
{
    protected $connector;

    public function __construct(MySQLi $connector)
    {
        $this->connector = $connector;
    }

    public function __destruct()
    {
        $this->connector->close();
    }

    public function getConnector()
    {
        return $this->connector;
    }

    public function query($sql)
    {
        $result = $this->getConnector()->query($sql);

        if(!$result) {
            $errno = $this->getConnector()->errno;
            $error = $this->getConnector()->error;

            throw new Exception(
                sprintf('SQL Error - #%s: %s', $errno, $error)
            );
        }

        return $result;
    }

    public function fetch($sql)
    {
        $result = $this->query($sql);
        return $result->fetch_assoc();
    }

    public function fetchAll($sql)
    {
        $data = array();
        $result = $this->query($sql);

        while($cursor = $result->fetch_assoc()) {
            $data[] = $cursor;
        }

        return $data;
    }

    public function getLastId()
    {
        return $this->getConnector()->insert_id;
    }
}

 

 

 

Removi o default connector, isto não faz sentido, cada conexão tem seu objeto. E removi o desconector, coloquei no destruct, quando o objeto morre, a conexão morre, e indentei e "limpei" um pouco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo agora me retorno os seguinte erros:

 

array(1) { [0]=> array(1) { ["cont"]=> string(2) "10" } }
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\WebServer\popbox.php on line 103

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, array given in D:\WebServer\popbox.php on line 105

 

popbox.php

 

<div id="dados">

 

<?php
require_once("config.php");


$query_str = $driver->fetchAll("SELECT COUNT(*) as cont FROM teste WHERE ID_PASTA = 0");
$query = var_dump($query_str);
$quant_resul = 8;
$pagina = 1;
$paginas = ceil($query['count'] / $quant_resul);
$result = $driver->fetchAll("SELECT *FROM teste LIMIT 0 , " . $quant_resul);


$x = 1;


mysql_close($conn);


while($query_array = mysql_fetch_assoc($result)){
echo "<div class='thumb'><a class='OBRA_".$x."' href='javascript:void(0);' onclick=\"javascript:exibeImagens(".$query_array['ID'].",".$x.");\"><img src='thumb.php?img=img/".$query_array['IMAGEM']."' /></a></div>";
$x++;
};
include('pag_indice.php');
?>
</div>

config.php

 

<?php
$conn = new MySQli('localhost', 'root', '', 'bancoteste');
$driver = new Db_Driver($conn);
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara mysql_* acabou. Mysqli não é mysql_, esqueça para o resto da vida estas malditas funções.

 

<?php
require_once("config.php");


$query_str = $driver->fetchAll("SELECT COUNT(*) as cont FROM teste WHERE ID_PASTA = 0");
$query = var_dump($query_str);
$quant_resul = 8;
$pagina = 1;
$paginas = ceil($query['count'] / $quant_resul);
$result = $driver->fetchAll("SELECT *FROM teste LIMIT 0 , " . $quant_resul);


$x = 1;




while($result){
echo "<div class='thumb'><a class='OBRA_".$x."' href='javascript:void(0);' onclick=\"javascript:exibeImagens(".$query_array['ID'].",".$x.");\"><img src='thumb.php?img=img/".$query_array['IMAGEM']."' /></a></div>";
$x++;
};
include('pag_indice.php');
?>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe ae se os erros são grotescos mas é que não manjo... ;(

quer dizer que vai ter que fazer todo o código ?

 

pois ta dando erro acusando as $query_array['ID']

 

linha 104

echo "<div class='thumb'><a class='OBRA_".$x."' href='javascript:void(0);' onclick=\"javascript:exibeImagens(".$query_array['ID'].",".$x.");\"><img src='thumb.php?img=img/".$query_array['IMAGEM']."' /></a></div>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use foreach, é muito melhor.

 

<?php
require_once("config.php");


$query_str = $driver->fetchAll("SELECT COUNT(*) as cont FROM teste WHERE ID_PASTA = 0");
$query = var_dump($query_str);
$quant_resul = 8;
$pagina = 1;
$paginas = ceil($query['count'] / $quant_resul);
$results = $driver->fetchAll("SELECT *FROM teste LIMIT 0 , " . $quant_resul);


$x = 1;




foreach ($results as $result){
echo "<div class='thumb'><a class='OBRA_".$x."' href='javascript:void(0);' onclick=\"javascript:exibeImagens(".$result['ID'].",".$x.");\"><img src='thumb.php?img=img/".$result['IMAGEM']."' /></a></div>";
$x++;
};
include('pag_indice.php');
?>
</div>

 

 

 

quer dizer que vai ter que fazer todo o código ?

 

Não entendi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que eu pensei que ia ter que "refazer" todo o código por causa do "MSQLi"... só isso. :)

e a pagina não ta abrindo agora :(

putz ta embaçado deixar isso "redondo"...

 

esquero que não acabe a paciencia de vc's.. :(

 

 

o mesmo erro usando o foreach ($result as $result)

 

 

 

array(1) { [0]=> array(1) { ["cont"]=> string(2) "10" } }
Notice: Undefined variable: query_array in D:\WebServer\popbox.php on line 104

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, esse sistema já começou errado, vc está com estado global pq usa procedural etc. Para informar nós, vc já fez muita coisa? Possui experiência com OO?

 

é que eu pensei que ia ter que "refazer" todo o código por causa do "MSQLi"... só isso. :)

 

Vai sim.

 

Estranho.

 

 

 

é que eu pensei que ia ter que "refazer" todo o código por causa do "MSQLi"... só isso. :)

e a pagina não ta abrindo agora :(

putz ta embaçado deixar isso "redondo"...

 

esquero que não acabe a paciencia de vc's.. :(

 

 

o mesmo erro usando o foreach ($result as $result)

 

 

 

array(1) { [0]=> array(1) { ["cont"]=> string(2) "10" } }
Notice: Undefined variable: query_array in D:\WebServer\popbox.php on line 104

 

Como eu disse, veja o arquivo com a respectiva linha, substitua essa query_array por results, com um foreach, como eu fiz. Estranho a página não abrir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:(

 

na boa ja vi qe o qe tenho aqui não vai me servi pra nada...

vo abandona isso, e larga o site pra la..

 

valeu pela paciencia e pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai sim.

 

Estranho.

Não necessariamente. Pode-se criar um Adapter procedural que mapeie as funções antigas mysql_* pelas correspondentes MySQLi.

 

Só não tenho certeza se seria possível sobrescrever as funções em questão. Se não der, só desativando a biblioteca, sumindo com as funções originais.

 

Vai continuar feio e vai degradar a performance, mas se reescrever o código inteiro for inviável, é uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não necessariamente. Pode-se criar um Adapter procedural que mapeie as funções antigas mysql_* pelas correspondentes MySQLi.

 

Só não tenho certeza se seria possível sobrescrever as funções em questão. Se não der, só desativando a biblioteca, sumindo com as funções originais.

 

Vai continuar feio e vai degradar a performance, mas se reescrever o código inteiro for inviável, é uma solução.

 

Não é uma solução, vc não pode criar as funções mysql_* pois elas ainda existem, estão apenas depreciadas no PHP 5.5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não necessariamente. Pode-se criar um Adapter procedural que mapeie as funções antigas mysql_* pelas correspondentes MySQLi.

 

Só não tenho certeza se seria possível sobrescrever as funções em questão. Se não der, só desativando a biblioteca, sumindo com as funções originais.

 

Vai continuar feio e vai degradar a performance, mas se reescrever o código inteiro for inviável, é uma solução.

 

 

find . -type f -iname *.php -exec sed -i 's:mysql_:mysqli_:i' {} \;

 

Bingo.

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.