PHP - Error al pasar un array de consulta mysql a JSON

 
Vista:
Imágen de perfil de Fabian
Val: 8
Ha aumentado su posición en 21 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error al pasar un array de consulta mysql a JSON

Publicado por Fabian (3 intervenciones) el 15/07/2020 20:11:46
Muy buenos días amigos, llevo 2 días intentando resolver un problema que tengo y la verdad creo que requiero ayuda. Resulta que tengo una base de datos sencilla y cuando hago la consulta desde un dato POST mandado desde AJAX todo bien, la consulta arroja solo una fila dado que es traer un dato por el ID, cuando el dato retorna a ajax intento pasarlo a tipo JSON utilizando JSON.parse pero me sale un error de sintaxis.

1. La consulta preparada es la siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public function showClientById(int $id)
{
    //consulta tabla clientes y trae datos
    $consulta = $this->bd->prepare('
        SELECT * FROM clientes WHERE id = :id LIMIT 1');
    $consulta->bindParam(":id", $id, PDO::PARAM_INT);
    $consulta->execute();
    $datos = $consulta->fetch();
    //print_r($datos);
    $json = array();
    if ($datos != false)
      {
        $json[] = array(
        'id' => $datos['id'],
        'nit'=> $datos['nit'],
        'nombre'=> $datos['nombre'],
        'email'=> $datos['email'],
        'ciudad'=> $datos['ciudad'],
        'direccion'=> $datos['direccion'],
        'empresa'=> $datos['empresa'],
        'actividadEco'=> $datos['actividadEco'],
        'telfijo'=> $datos['telfijo'],
        'telmovil'=> $datos['telmovil']
        );
        $json = json_encode($json, JSON_FORCE_OBJECT);
        $resultado = $json;
      }
      else
      {
        $resultado = $datos;
      }
     return $resultado;
}
2. el archivo que envía a la clase Clientes al método showClientById el idClient y que recibe el array retornado es el siguiente
1
2
3
4
5
6
7
8
9
10
11
12
13
if(isset($_POST['clientId']) and is_numeric($_POST['clientId']) != false)
{
    $clienteId = filter_var(strtolower($_POST['clientId']), FILTER_SANITIZE_STRING);
    $clienteById = new Clientes();
    $resultClient = $clienteById->showClientById($clienteId);
    if($resultClient != false)
    {
        echo $resultClient;
    }else
    {
        $errores.='<li class="advertencias text-center bg-danger text-light lead">¡El Cliente con este ID no existe!</li>';
    }
}
3. Dado que la consula es exitosa entra al if y envía al archivo AJAX el array de tipo String, esta variable se intenta convertir a tipo JSON pero se genera un error:

1
2
3
4
5
6
7
8
9
10
11
12
13
$('.buscarId').click(function(e) {
    let clientId = $('#clientId').val();
    console.log(clientId);
    $.ajax(
    {
        url: 'contenido.php',
        type: 'POST',
        data: {clientId},
        success: function(response){
            let task =JSON.parse(response);
            console.log(task);
        }
    })
La consola imprime el siguiente error:
Uncaught SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 286 of the JSON data.

Adjunto un documoento paso a paso bien explicado para que entiendan que sucede, muchas gracias a quien pueda ayudarme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lopez
Val: 395
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al pasar un array de consulta mysql a JSON

Publicado por Lopez (128 intervenciones) el 15/07/2020 22:19:40
Hola Fabian,
Parece estar mal la iteración no?. Digo, pareces estar enviando varias veces los resultados.

1
$json = json_encode($json, JSON_FORCE_OBJECT);

Prueba cambiando por algo así:

1
2
/* Envias todos los datos de manera correcta una única vez */
echo json_encode($json, JSON_FORCE_OBJECT);

Veamos si soluciona el fallo, aunque seguro habrá que solventar unas cosillas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fabian
Val: 8
Ha aumentado su posición en 21 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error al pasar un array de consulta mysql a JSON

Publicado por Fabian (3 intervenciones) el 16/07/2020 01:02:16
Bueno muchas gracias por responder, te cuento que hice lo que me sugeriste pero aún lo logro solucionar me sale este error
Uncaught SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 267 of the JSON data
success http://localhost/anderson/js/script.js:30

Parece que el array devuelto si lo está convirtiendo a string con Json_encode porque si comento la función JSON.parse e imprimo en consola el resultado de jason_encode, si lo hace y esto es lo que muestra:

1
{"0":{"id":"9","nit":"    455887444","nombre":"camilo moreno","email":"camilo@hotmail.com","ciudad":"    cali","direccion":"    cl 39 56-44","empresa":"    camaras cali","actividadEco":"    instalaciones camaras","telfijo":"   999999999","telmovil":"    320125458"}}

esto lo arroja esta sentencia:
1
2
3
4
5
6
7
8
9
10
if($result != false)
{
    //echo "Imprimiendo la cadena string";
    $jsonstring = json_encode($result, JSON_FORCE_OBJECT);
    echo $jsonstring;
}else
{
echo "Error en la consulta";
$errores.='<li class="advertencias text-center bg-danger text-light lead">¡El Cliente con este ID no existe!</li>';
}

si este string le aplico JSON.parse me genera el error de sintaxis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fabian
Val: 8
Ha aumentado su posición en 21 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error al pasar un array de consulta mysql a JSON

Publicado por Fabian (3 intervenciones) el 16/07/2020 05:18:03
Por favor hagan caso omiso a lo anterior; bueno ya se cual es el error; resulta que la consulta me está arrojando el siguiene array:

1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
    [id] => 10
    [nit] => 66666666666
    [nombre] => oscar eduardo garcia
    [email] => oscar@hotmail.com
    [ciudad] =>  cali
    [direccion] =>  cra 88 25a-09 barrio el caney
    [empresa] =>  oscar soluciones s.a.s
    [actividadEco] => director inform�tico
    [telfijo] =>  25689878
    [telmovil] =>  3165245878
)

pero al aplicar la funcion
1
2
jsonstring = json_encode($result, JSON_FORCE_OBJECT);
var_dump($jsonstring);

Me arroja false, por lo tanto la conversión no se está realizando, muchas gracias por la ayuda que puedan prestar para resolver este error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error al pasar un array de consulta mysql a JSON

Publicado por joel (1269 intervenciones) el 16/07/2020 10:51:52
Hola Fabian, no muestras tu código, pero yo lo he probado y me ha funcionado perfectamente!!!

prueba ha hacer un echo en vez de un var_dump!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
$x=Array (
    "id" => 10,
    "nit" => 66666666666,
    "nombre" => "oscar eduardo garcia",
    "email" => "oscar@hotmail.com",
    "ciudad" => " cali",
    "direccion" => " cra 88 25a-09 barrio el caney",
    "empresa" => " oscar soluciones s.a.s",
    "actividadEco" => "director inform�tico",
    "telfijo" => 25689878,
    "telmovil" => 3165245878,
);
 
echo json_encode($x, JSON_FORCE_OBJECT);

El resultado es:
1
{"id":10,"nit":66666666666,"nombre":"oscar eduardo garcia","email":"oscar@hotmail.com","ciudad":" cali","direccion":" cra 88 25a-09 barrio el caney","empresa":" oscar soluciones s.a.s","actividadEco":"director inform\ufffdtico","telfijo":25689878,"telmovil":3165245878}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error al pasar un array de consulta mysql a JSON

Publicado por Ana (1 intervención) el 15/03/2021 19:56:40
Hola!

Yo también tuve ese problema y la solución que me funcionó es que al realizar tu consulta pongas

1
mysqli_set_charset($conexion, "utf8");

para que no tome en cuenta los caracteres como el que tienes en tu array en la parte de [actividadEco] => director inform�tico, si lo resolvió en su momento que bien, pero probablemente alguien mas tenga ese problema y lo solucione de esta forma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar