Tengo un procedimiento almacenado en la base de datos MySQL que ejecuta una consulta como "SELECT * FROM table" y devuelve estas filas.
Quiero crear un JSON con esta información, ¿cómo puedo hacer eso?
Este es mi código:
Principal
<?php include "config.php"; include "utils.php"; $dbConn = connect($db); if ($_SERVER['REQUEST_METHOD'] == 'GET'){ $sth = $dbConn->prepare("CALL consulta_administrador()"); $sth->execute(); $result = $sth->fetchAll(); var_dump($result); echo json_encode($result); } ?>config.php
<?php $db = [ 'host' => 'myDBHost', 'username' => 'myUsername', 'password' => 'myPassword', 'db' => 'myDB' ]; ?>utils.php
<?php function connect($db) { try { $conn = new PDO("mysql:host={$db['host']};dbname={$db['db']}", $db['username'], $db['password']); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $conn; } catch (PDOException $exception) { echo "Error:" , $exception->getMessage(), '<br>'; die(); } } ?>Puedes hacer algo como esto:
<?php $pdo = new PDO("mysql:dbname=database;host=127.0.0.1", "user", "password"); $statement = $pdo->prepare("SELECT * FROM table"); $statement->execute(); $results = $statement->fetchAll(PDO::FETCH_ASSOC); $json = json_encode($results);Editar: suponiendo que esté conectado con la base de datos:
if ($_SERVER['REQUEST_METHOD'] == 'GET'){ $pdo = new PDO("mysql:host={$db['host']};dbname={$db['db']}", $db['username'], $db['password']); $sql = $pdo->prepare("CALL consulta administratdor()"; $sql->execute(); $results = $statement->fetchALL(PDO::FETCH_ASSOC); $json = json_encode($results); }Obtuve la solución a mi problema, el problema era que en mi base de datos tengo caracteres especiales que la función json_encode no entiende, para resolverlo agregue esta línea a mi código $dbConn->query("SET NAMES 'UTF8'"); :
$dbConn = connect($db); $dbConn->query("SET NAMES 'UTF8'"); if ($_SERVER['REQUEST_METHOD'] == 'GET'){ $sql = "CALL consulta_administrador()"; $q = $dbConn->query($sql); $data = $q->fetchAll(PDO::FETCH_ASSOC); echo json_encode($data, JSON_UNESCAPED_UNICODE); }