JAMES WEB
Aprenda como se faz.
Banco de dados MySql Xampp
Imagine sua loja virtual como um grande armazém, onde cada produto tem seu lugar específico e todas as informações sobre vendas, clientes e estoque são cuidadosamente organizadas. Para gerenciar esse “armazém digital” de forma eficiente, precisamos de um sistema robusto e confiável: o banco de dados.
Neste capítulo, vamos explorar o coração da sua loja virtual: o banco de dados MySQL, utilizando o ambiente de desenvolvimento XAMPP. Você aprenderá a criar o banco de dados db-ecommerce, a estruturá-lo para armazenar todas as informações relevantes do seu negócio e a interagir com ele através de uma classe PHP personalizada.
Mas o que é um banco de dados e para que serve?
SQL significa Structured Query Language ou, em português, Linguagem de Consulta Estruturada. É uma linguagem padrão para gerenciar e manipular dados em bancos de dados relacionais.
Um banco de dados SQL é uma coleção organizada de dados, estruturada em tabelas, que se relacionam entre si. Imagine uma planilha do Excel, mas muito mais poderosa e complexa, capaz de armazenar grandes volumes de informações e permitir buscas e análises sofisticadas.
Para que serve um banco de dados SQL?
- Armazenar dados:A principal função é guardar informações de forma organizada e estruturada, facilitando a recuperação quando necessário;
- Gerenciar dados: Permite adicionar, modificar, excluir e buscar dados de forma eficiente;
- Relacionar dados: Permite estabelecer conexões entre diferentes conjuntos de dados, como por exemplo, relacionar um cliente com seus pedidos;
- Analisar dados: Através de consultas SQL, é possível realizar análises complexas sobre os dados, gerando relatórios e insights valiosos.

Configurando os arquivos
Para iniciar nosso Projeto E-commerce vamos importar o banco de dados, a estrutura principal do projeto.
Para criar o banco de dados db-ecommerce faça o seguinte:
- Realize o download do arquivo db-ecommerce;
- Abra o painel Xampp, ative o Apache e o Sql;
- Clique em “Admin” no painel Xampp;
- Clique em importar;
- Clique em “Procurar no seu computador” para selecionar o arquivo importado;
- Localize o arquivo de db-ecommerce e clique em executar.
Se tudo ocorrer bem o banco de dados db-ecommerce será criado. Observe que alguns dados já estão inseridos para testes.
O phpMyAdmin oferece uma interface visual intuitiva para explorar os relacionamentos entre as tabelas de um banco de dados. Essa visualização é fundamental para entender a estrutura do banco e como os dados estão conectados. Para acessar esta visualização clique no banco de dados e no menu procure por Desenhador.

Configurando a Classe Sql
Neste módulo iremos criar nossas próprias classes e inserí-las na pasta vendor da estrutura de autoloader do composer.
Primeiro vamos criar a pasta hcoderbr dentro da pasta vendor. Na pasta hcoderbr crie outras pastas php-class > src > DB e dentro desta última no arquivo “sql.php”.
A Classe Sql que encapsula a lógica de conexão e interação com um banco de dados MySQL. Essa classe é utilizada para realizar consultas SQL e retornar os resultados em formato de array associativo.
Veja o código a seguir do arquivo “sql.php”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?php namespace Hcode\DB; use Hcode\Model; class Sql { const HOSTNAME = "127.0.0.1" ; const USERNAME = "root" ; const PASSWORD = "" ; const DBNAME = "db_ecommerce" ; private $conn ; public function __construct() { $this ->conn = new \PDO( "mysql:dbname=" .Sql::DBNAME. ";host=" .Sql::HOSTNAME, Sql::USERNAME, Sql::PASSWORD ); } private function setParams( $statement , $parameters = array ()) { foreach ( $parameters as $key => $value ) { $this ->bindParam( $statement , $key , $value ); } } private function bindParam( $statement , $key , $value ) { $statement ->bindParam( $key , $value ); } public function query( $rawQuery , $params = array ()) { $stmt = $this ->conn->prepare( $rawQuery ); $this ->setParams( $stmt , $params ); $stmt ->execute(); } public function select( $rawQuery , $params = array ()): array { $stmt = $this ->conn->prepare( $rawQuery ); $this ->setParams( $stmt , $params ); $stmt ->execute(); return $stmt ->fetchAll(\PDO::FETCH_ASSOC); } } ?> |
Análise Linha a Linha da Classe Sql.
- L01 – <?php
Inicia o bloco de código PHP. - L02 – namespace Hcode\DB;
Define o namesapace chamado Hcode\DB para organizar a Classe Sql e evitar conflitos com outras classes que possam ter o mesmo nome. - L03 – use Hcode\Model;
Importa o namespace Hcode\Model para permitir o uso de classes ou elementos desse sem precisar de digitar o arquivo completo. - L05 – class Sql {
Define uma classe Sql que irá conter os métodos para interação com o banco de dados. - L06 – const HOSTNAME = “127.0.0.1”;
Define uma constante chamada HOSTNAME com o valor “127.0.0.1”, que representa o endereço local do servidor do banco de dados. - L07 – const USERNAME = “root”;
Define uma constante chamada USERNAME com o valor “root”, que representa o nome de usuário do banco de dados. - L08 – const PASSWORD = “”;
Define uma constante chamada PASSWORD com o valor vazio, que representa a senha do banco de dados. - L09 – const DBNAME = “db_ecommerce”;
Define uma constante chamada DBNAME com o valor “db_ecommerce”, que representa o nome do banco de dados. - L11 – private $conn;
Declara uma propriedade privada chamada $conn que será utilizada para armazenar a conexão com o banco de dados. - L13 – public function __construct()
Este trecho de código PHP (método construtor), está relacionado à conexão com um banco de dados. Mais especificamente, ele está configurando a conexão com um banco de dados MySQL utilizando a biblioteca PDO (PHP Data Objects). - L15 – $this->conn = new \PDO( … );
Cria uma nova conexão com o banco de dados utilizando a classe PDO. Os argumentos passados para o construtor são: - L16 – mysql:dbname=”.Sql::DBNAME.”;host=”.Sql::HOSTNAME;
A string de conexão, especificando o tipo de banco de dados (MySQL), o nome do banco de dados (obtido da constante DBNAME) e o host (obtido da constante HOSTNAME) - L17 – Sql::USERNAME:;
O nome de usuário do banco de dados (obtido da constante USERNAME); - L18 – Sql::PASSWORD:
A senha do banco de dados (obtida da constante PASSWORD); - L22 – private function setParams($statement, $parameters = array())
O método setParams é uma função privada com o objetivo de vincular (bind) parâmetros a uma declaração preparada (prepared statement).
Uma declaração preparada é como um modelo de consulta SQL pré-compilado e otimizado pelo banco de dados. Em vez de enviar a consulta completa com os valores diretamente para o banco de dados a cada execução, você envia o modelo da consulta e depois preenche os valores dos parâmetros quando precisar executar a consulta.
A Função setParams que recebe dois parâmetros: - $statement: Um objeto PDOStatement que representa a instrução SQL preparada.
- $parameters: Um array associativo contendo os valores dos parâmetros a serem vinculados. Se não for fornecido, um array vazio é usado por padrão.
- L24 – foreach ($parameters as $key => $value) {:
Inicia um loop foreach para iterar sobre cada elemento do array $parameters, onde:
$key: Representa a chave do elemento no array (o nome do parâmetro). Geralmente representa o nome do campo (ou coluna) da tabela. Por exemplo, em uma tabela de usuários, $key poderia assumir valores como “idusers”, “desnome”, “deslogin” e “despassword”.
$value: Representa o valor associado à chave. Representa o valor contido naquele campo específico para a linha atual. Ou seja, se $key for “desnome” e estivermos na segunda linha da tabela, $value poderia ser “Maria”. - L25 – $this->bindParam($statement, $key, $value);
Esta linha é responsável por vincular um parâmetro a um marcador de posição em uma declaração SQL preparada. Chama o método bindParam; - L29 – private function bindParam($statement, $key, $value)
O método bindParam é fundamental para prevenir injeção SQL. Ao invés de concatenar diretamente valores em uma string SQL, você utiliza marcadores de posição e vincula os valores a esses marcadores posteriormente. Isso garante que os valores sejam tratados como dados e não como parte da própria instrução SQL, evitando que códigos maliciosos sejam executados.
- $statement:
É um objeto do tipo PDOStatement, que representa uma instrução SQL preparada. Ele é passado como argumento para este método; - $key:
É uma string que representa o nome do marcador de posição (placeholder) na sua instrução SQL preparada. Geralmente, usamos : seguido de um nome, como :nome, :email, etc. - $value:
É o valor que será vinculado ao marcador de posição. Este valor será inserido na consulta SQL quando a instrução for executada. - $statement->bindParam($key, $value);
Ao executar essa linha, você está dizendo ao banco de dados: “Pegue o valor de $value e coloque-o no lugar onde está o marcador de posição $key na minha declaração SQL preparada.
- $statement:
- L34 – public function query($rawQuery, $params = array())
A função query é uma ferramenta conveniente para executar consultas SQL preparadas de forma segura e eficiente. Ela simplifica o processo de vinculação de parâmetros e execução da consulta, tornando o código mais legível e reutilizável. - L36 – $stmt = $this->conn->prepare($rawQuery);
- $stmt
O método prepare do objeto $this->conn (a conexão com o banco de dados) cria um objeto PDOStatement e o armazena em $stmt. Esse objeto contém a consulta SQL compilada. - $this->conn->prepare():
Essa parte pega a conexão com o banco de dados (armazenada em $this->conn) e prepara a consulta. O banco de dados compila a consulta internamente, otimizando sua execução. - $rawQuery:
É a consulta SQL que você deseja executar, mas com marcadores de posição no lugar dos valores reais. Por exemplo: SELECT * FROM usuarios WHERE desnome = :nome.
- $stmt
- L37 – $this->setParams($stmt, $params);
- $this->setParams():
Essa função que itera sobre o array $params e usa o método bindParam do PDO para associar cada valor ao seu respectivo marcador de posição na consulta preparada. - $stmt
Vincula os valores dos parâmetros aos marcadores de posição da consulta. - $params:
É um array associativo onde as chaves são os marcadores de posição da consulta e os valores são os dados que você quer inserir. Por exemplo: [‘nome’ => ‘João’].
- $this->setParams():
- L38 – $stmt->execute();
Executa a consulta preparada. O banco de dados substitui os marcadores de posição pelos valores vinculados e processa a consulta. - L41 – public function select($rawQuery, $params = array()):array
Define um método público chamado select que recebe uma consulta SQL (rawQuery) e um array de parâmetros opcional (params) e retorna um array.- $stmt = $this->conn->prepare($rawQuery);
Prepara a consulta SQL utilizando o método prepare do objeto de conexão. - $this->setParams($stmt, $params);
Chama o método setParams para associar os parâmetros à consulta. - $stmt->execute();
Executa a consulta utilizando o método execute do objeto statement. - return $stmt->fetchAll(\PDO::FETCH_ASSOC);
Retorna os resultados da consulta em formato de array associativo utilizando o método fetchAll com o tipo de fetch PDO::FETCH_ASSOC.
- $stmt = $this->conn->prepare($rawQuery);
Para testar o Método Sql, acesse seu arquivo index.php e insira no final do código a rota “teste-dados”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // Inicio do código index.php $app ->get( '/teste-dados' , function () { try { $sql = new Hcode\DB\Sql(); $results = $sql ->select( "SELECT * FROM tb_users" ); echo json_encode( $results ); } catch (PDOException $e ) { echo "Erro ao conectar ao banco de dados: " . $e ->getMessage(); } }); $app ->run(); ?> |
Observando apenas a parte nova (dentro do bloco try) temos:
- L06 – try:
Inicia um bloco try, que é utilizado para tratar possíveis exceções (erros) que possam ocorrer durante a execução do código dentro desse bloco. - L07 – $sql = new Hcode\DB\Sql();:
Cria uma nova instância da classe Sql, uma classe customizada para interagir com o banco de dados. - L08 – $results = $sql->select(“SELECT * FROM tb_users”);:
Executa uma consulta SQL para selecionar todos os dados da tabela “tb_users”. O resultado da consulta é armazenado na variável $results. - L09 – echo json_encode($results);:
Codifica o resultado da consulta em formato JSON e o envia como resposta para o cliente. O formato JSON é comumente utilizado para transmitir dados entre um servidor e um cliente. - L10 – catch (PDOException $e):
Captura qualquer exceção do tipo PDOException que possa ser lançada dentro do bloco try. PDOException é um tipo de exceção específico para erros relacionados ao banco de dados. - L11 – echo “Erro ao conectar ao banco de dados: ” . $e->getMessage();:
Se ocorrer um erro ao conectar ao banco de dados, esta mensagem será exibida, juntamente com uma mensagem mais detalhada sobre o erro contida na propriedade $e->getMessage().
Ao executar o código via browser com “localhost/ecommerce/teste-dados” você verá os dados armazenados na tabela tb_users parecido com imagem abaixo:

Para saber mais:
- Banco de Dados com MySqlAdmin;
- Json