Connect database class

1

How do I not have to connect to the database with 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 ....;
    }
}
    
asked by anonymous 20.03.2018 / 17:39

2 answers

1

Do this:

<?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());
    
20.03.2018 / 17:51
1

You can create a static method connection class. So the $mysql attribute will only be set 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; to protected static $mysql; only the classes that are extended to the Connection class that can access this attribute.

So:

class Perguntas extends Conexao{

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