Last active
August 20, 2022 17:23
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); | |
} | |
} | |
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
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!