1
resposta

Erro de conexão com o banco MySQL em ambiente docker

Boa noite,

Estou tendo dificuldades de inserir os produtos no banco MySQL, estou utilizando docker e docker-compose.

Demonstração de erro:

Warning: mysqli_connect(): (HY000/2002): Connection refused in /var/www/html/adiciona-produto.php on line 6

Warning: mysqli_query() expects parameter 1 to be mysqli, boolean given in /var/www/html/adiciona-produto.php on line 9
O produto Lápis não foi adicionado com sucesso.


Warning: mysqli_close() expects parameter 1 to be mysqli, boolean given in /var/www/html/adiciona-produto.php on line 16

Segue código "adiciona-produto.php":

<?php include("cabecalho.php"); ?>
<?php

$produto = $_GET["produto"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('127.0.0.1', 'root', '', 'loja', '3306');

$query = "insert into produtos (nome, preco) values ('{$produto}', {$preco})";
if(mysqli_query($conexao, $query)) { ?>
        <p class="alert-success">O produto <?= $produto ?>, <?= $preco ?> foi adicionado com sucesso.</p>
<?php } else { ?>
        <p class="alert-danger">O produto <?= $produto ?> não foi adicionado com sucesso.</p>
<?php
}

mysqli_close($conexao);

?>
<?php include("rodape.php"); ?>

Segue comandos MySQL para demonstrar o banco loja e tabela produtos criados. Efetuado insert

➜ repogitPHP: (master) ✗ mysql -h 127.0.0.1 -P 3306 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.15 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| blog               |
| information_schema |
| loja               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.01 sec)

mysql> use loja;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from produtos;
+----+-------------+----------+
| id | nome        | preco    |
+----+-------------+----------+
|  1 | Carro       | 20000.00 |
|  2 | Motocicleta | 10000.00 |
|  3 | bicicleta   |   300.00 |
+----+-------------+----------+
3 rows in set (0.00 sec)

mysql> 
1 resposta

Oi Vitor, tudo bom?

Como você está organizando os containers no docker? O serviço de mysql está no mesmo container do PHP? Ou eles estão em containers separados?

Compartilha aqui com a gente seu arquivo de configuração do docker-compose, assim fica mais fácil de dar uma opinião mais concreta =)

Pelo erro, sabemos que a conexão não está funcionando. Porém, tenta dar uma debugada definindo as variaveis:

ini_set('display_errors',1);
error_reporting(E_ALL);

$produto = $_GET["produto"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('127.0.0.1', 'root', '', 'loja', '3306');
...

Também é importante saber qual versão do PHP você está usando, mas acredito que o docker-compose responda isso também.

Aguardo retorno.

Abraço!