1
resposta

Problema com banco de dados php e json

Estou tentando conectar as minhas informação do php ao mysql para trazer informações do banco de dados e me dar as informação em json, mas esta dando erro e aparentemente o problema é a "senha" do banco, porem eu coloquei a senha certa.

index.php:

connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM sua_tabela"; $result = $conn->query($sql); $rows = array(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $rows[] = $row; } echo json_encode($rows); } else { echo "0 results"; } $conn->close(); ?>

docker-compose.yml:

version: '3' services: web: build: context: . ports: - "8080:80" volumes: - ./index.php:/var/www/html/index.php depends_on: - db

db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: sua_senha MYSQL_DATABASE: database_name MYSQL_USER: user_name MYSQL_PASSWORD: password

Dockerfile:

FROM php:8.2-apache

RUN docker-php-ext-install mysqli

O erro que ta dando é o seguinte:

Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'root'@'localhost' (using password: YES) in /Users/lucasdevicq/Documents/processosSeletivos/Demander/parte02/index.php:7 Stack trace: #0 /Users/lucasdevicq/Documents/processosSeletivos/Demander/parte02/index.php(7): mysqli->__construct('127.0.0.1', 'root', Object(SensitiveParameterValue), 'mysql') #1 {main} thrown in /Users/lucasdevicq/Documents/processosSeletivos/Demander/parte02/index.php on line 7

1 resposta

E aí, Lucas!

Parece que o erro tá na conexão com o banco. O PHP tá reclamando que a senha tá errada, mesmo você jurando que tá certa, né? Vamos tentar resolver isso.

Primeira coisa, dá uma conferida no seu docker-compose.yml. Lá no serviço do banco (db), você tá usando a senha que tá no seu código PHP (sua_senha), mas quando você configura o MySQL, tá usando outra senha (password). Bora ajustar isso pra usar a mesma senha nos dois lugares, beleza?

Deixa o docker-compose.yml assim:

version: '3'
services:
  web:
    build: context: .
    ports:
      - "8080:80"
    volumes:
      - ./index.php:/var/www/html/index.php
    depends_on:
      - db

  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: sua_senha
      MYSQL_DATABASE: database_name
      MYSQL_USER: user_name
      MYSQL_PASSWORD: sua_senha

Beleza, agora ambos tão usando a mesma senha. Se isso não resolver, pode ser que o MySQL esteja implicando com a forma como você tá tentando se conectar. No teu código PHP, tenta trocar '127.0.0.1' por 'db' na linha onde você tá criando a conexão. Fica assim:

$conn = new mysqli('db', 'root', 'sua_senha', 'mysql');

Dá uma testada e vê se agora rola. Se continuar dando problema, a gente vai investigando mais. Boa sorte aí!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software