Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] json_encode devuelve vacío desde una consulta odbc con datos

Estas en el tema de json_encode devuelve vacío desde una consulta odbc con datos en el foro de PHP en Foros del Web. Buenos días/tardes. Tengo el siguiente problema con el que llevo peleando dos días. Iniciamos el script con una consulta SQL a través de ODBC y ...
  #1 (permalink)  
Antiguo 20/12/2017, 06:08
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 12 años, 7 meses
Puntos: 2
json_encode devuelve vacío desde una consulta odbc con datos

Buenos días/tardes.

Tengo el siguiente problema con el que llevo peleando dos días.
Iniciamos el script con una consulta SQL a través de ODBC y guardamos los resultados en un resultset. Hasta aquí bien porque un print_r de esa variable devuelve datos por pantalla.

En este punto es cuando hacemos un while a odbc_fetch_array (resultSet), y en cada iteración guardamos el resultado valor en una variable array llamada resultados[]. Pues al hacer el json enconde de esta variable, siempre devuelve vacío.

Apunto los códigos y sus resultados.
Generación del recordset:
Código PHP:
$resultados = array();

$resultSet odbc_exec$conn$consulta ) or die ("Error consulta: ".odbc_errormsg());

while ( 
$linea odbc_fetch_array($resultSet) ) {
  
$resultados[] = $linea;

A remarcar que si dentro del while, en vez de $resultados[] pongo $resultados, sin los corchetes, SI me genera un json con una única fila de los fetch array.

print_r($resultados):
Código PHP:
Array
(
    [
0] => Array
        (
            [
EPCAAA] => 2017
            
[EPCNPR] => 20464
        
)

    [
1] => Array
        (
            [
EPCAAA] => 2017
            
[EPCNPR] => 20466
        
)

    [
2] => Array
        (
            [
EPCAAA] => 2017
            
[EPCNPR] => 20467
        
)

Y luego ya simplemente intento mostrar el json por pantalla, aunque más adelante lo guardaré en un fichero en local
Código PHP:
$json json_encode($resultados);
echo 
"Json: <br>$json"
  #2 (permalink)  
Antiguo 20/12/2017, 08:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.876
Antigüedad: 10 años, 4 meses
Puntos: 2152
Respuesta: json_encode devuelve vacío desde una consulta odbc con datos

La base de datos está codificada en UTF-8? si no, ese es el problema, json_encode() trabaja solo con UTF-8.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 21/12/2017, 02:37
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: json_encode devuelve vacío desde una consulta odbc con datos

Pues parece ser que era justo eso, la base de datos no está en UTF-8
Estuve buscando varias formas de pasarlo, desde modificar la consulta SQL para que retornara los valores ya codificados a utf-8, varias funciones que lo hacían, y finalmente encontré esta solución:

Código PHP:
function utf8_encode_deep(&$input) {
    if (
is_string($input)) {
        
$input utf8_encode($input);
    } else if (
is_array($input)) {
        foreach (
$input as &$value) {
            
utf8_encode_deep($value);
        }
        
        unset(
$value);
    } else if (
is_object($input)) {
        
$vars array_keys(get_object_vars($input));
        
        foreach (
$vars as $var) {
            
utf8_encode_deep($input->$var);
        }
    }

La verdad, si lo hubiera pensado detenidamente, hubiera podido hacerla yo mismo, pero estaba cegado buscando la manera de que SQL devolviera los valores directamente con CAST o CONVERT, pero no lo conseguía.

Gracias por la idea Triby, desconocía que json_encode sólo funcionaba con UTF-8

Etiquetas: devuelve, odbc, sql, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:23.