Connect class database

Asked

Viewed 526 times

1

How do I not need to connect to the database every Function in PHP class?

I’m trying this way:

class Perguntas {
    public function __construct(){
       $mysqli = new mysqli('localhost','root','','game');
    }
    public function exemplo(){
       $resultado = $mysqli->query("SELECT * FROM perguntas");
       $row = $resultado->fetch_assoc();
       echo ....;
    }
}
  • You have to make a class that has the responsibility to connect to the database.

2 answers

1


Do so:

<?php

class Perguntas {
//Deixando a variável $mysli publica, ela pode ser acessada por qualquer um, 
//caso queira que ela seja acessada apenas na class, você pode deixa-lá como 
//private.

public $mysqli;

    public function __construct(){
        //p: serve para usar uma conexão existente caso essa já tenha sido 
        //criada, assim evita de ficar usando memoria do servidor atoa

       $this->mysqli = new mysqli('p:localhost','root','','game');
       //$this->nome_da_viável faz com que você acesse a variável fora da 
       //função, como ela está fora, qualquer outra função pode acessa-la 
       //também, como você já a definiu como contendo os dados com banco é 
       //só utiliza-lá como fiz na função abaixo.

       return true;
    }

    public function exemplo(){
       $resultado = $this->mysqli->query("SELECT * FROM perguntas");
       $row = $resultado->fetch_assoc();
       return $row;
    }
}


$perguntas = new perguntas();

var_dump($perguntas->exemplo());

1

You can create a connection class with static method. So the attribute $mysql will be configured only once and can be used by other classes.

Class Conexao.php

class Conexao{

    public static $mysql;

    function __construct(){
        $this::setSql();
    }

    static function setSql(){
        self::$mysql= new mysqli('p:localhost','root','','game');
    }

}

Class Perguntas.php

class Perguntas{

    public function exemplo(){
       $mysqli = Conexao::$mysql;
       $selecao = $mysqli -> query("SELECT * FROM perguntas");
       print_r($selecao);
    }
}

index php.

include("Conexao.php");
include("Perguntas.php");
new Conexao();
$perguntas = new Perguntas();
$perguntas -> exemplo();

The created attribute is public, but if you change it from public static $mysql; for protected static $mysql; only classes that are extended to the Connection class that can access this attribute.

Thus:

class Perguntas extends Conexao{

    public function exemplo(){
       $mysqli = Conexao::$mysql;
       $selecao = $mysqli -> query("SELECT * FROM perguntas");
       print_r($selecao);
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.