Skip to content

Instantly share code, notes, and snippets.

@douglasjunior
Last active August 20, 2022 17:23
Show Gist options
  • Save douglasjunior/c845d3e638beba539e4b to your computer and use it in GitHub Desktop.
Save douglasjunior/c845d3e638beba539e4b to your computer and use it in GitHub Desktop.
Exemplo de consulta no banco de dados e retorno de JSON utilizando PHP e MySQL.
<?php
header('Content-Type: application/json');
header('Character-Encoding: utf-8');
// recebe os parâmetros
$QTD = (int) filter_input(INPUT_GET, 'qtd', FILTER_VALIDATE_INT);
$LAT = (float) filter_input(INPUT_GET, 'lat', FILTER_VALIDATE_FLOAT);
$LNG = (float) filter_input(INPUT_GET, 'lng', FILTER_VALIDATE_FLOAT);
if ($LAT && $LNG) {
$servername = "127.0.0.1";
$username = "usuario";
$password = "senha";
$dbname = "database";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
// faz a consulta
$QTD = $QTD > 25 ? 25 : ($QTD < 1 ? 1 : $QTD);
$sql = "SELECT id, razao_social, endereco, numero, cidade, uf, cep, latitude, longitude, bairro, "
. "(6371 * acos( cos( radians($LAT) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians($LNG) )
+ sin( radians($LAT) )
* sin( radians( latitude ) ) ) ) AS distancia "
. "FROM tec_tecnico "
. "ORDER BY distancia "
. "LIMIT $QTD";
$resultTecnicos = $conn->query($sql);
// preenche o array com os dados da consulta
$json = array();
while ($rowTecnico = $resultTecnicos->fetch_assoc()) {
$telefones = array();
$sql = "SELECT telefone FROM tec_telefone WHERE tecnico_id = '" . $rowTecnico['id'] . "'";
$resultTelefones = $conn->query($sql);
while ($rowTelefone = $resultTelefones->fetch_assoc()) {
$telefones[] = utf8_encode($rowTelefone['telefone']);
}
$emails = array();
$sql = "SELECT email, tipo FROM tec_email WHERE tecnico_id = '" . $rowTecnico['id'] . "'";
$resultEmails = $conn->query($sql);
while ($rowEmail = $resultEmails->fetch_assoc()) {
$emails[] = array(
'email' => utf8_encode($rowEmail['email']),
'tipo' => utf8_encode($rowEmail['tipo'])
);
}
$tecnico = array(
'id' => utf8_encode($rowTecnico['id']),
'razao_social' => utf8_encode($rowTecnico['razao_social']),
'endereco' => utf8_encode($rowTecnico['endereco']),
'numero' => utf8_encode($rowTecnico['numero']),
'bairro' => utf8_encode($rowTecnico['bairro']),
'cidade' => utf8_encode($rowTecnico['cidade']),
'uf' => utf8_encode($rowTecnico['uf']),
'cep' => utf8_encode($rowTecnico['cep']),
'latitude' => (float) $rowTecnico['latitude'],
'longitude' => (float) $rowTecnico['longitude'],
'distancia' => (float) $rowTecnico['distancia'],
'telefones' => $telefones,
'emails' => $emails
);
$json['tecnicos'][] = $tecnico;
}
// converte o array em Json
echo json_encode($json, JSON_PRETTY_PRINT);
mysqli_close($conn);
}
}
@Felipe-Marques
Copy link

Obrigado Douglas!! me ajudou muito cara. Parabéns por compartilhar!

@srbonilha
Copy link

Também agradeço Douglas!.. está me ajudando bastante!!!

@douglasjunior
Copy link
Author

Olá pessoal, que bom que está ajudando!

Porém, é importante lembrar que o código deste exemplo ignora algumas boas práticas que precisam ser levadas em conta quando escrevemos uma rota HTTP, como por exemplo, tratamento de erros.

Bons estudos!

@csr4mos
Copy link

csr4mos commented Jan 6, 2021

Obrigado, por compartilhar , me deu uma luz pra descobrir onde eu estava errando , na formatação para converter um array php em json !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment