TransWikia.com

consulta json php con resultados duplicados

Stack Overflow en español Asked by mono101 on January 27, 2021

El resultado de mi consulta php se muestra de la siguiente forma:
introducir la descripción de la imagen aquí

se repiten los datos en cada consulta.

            <?php
            header('Content-type: text/html; charset=UTF-8');
            include('functions.php');
            $sql = "SELECT * FROM `mitabla`";
            function connectDB()
            {
                $server = "mihost";
                $user   = "miusr";
                $pass   = "mipass";
                $bd     = "mibd";
                $conexion = mysqli_connect($server, $user, $pass, $bd);
                mysqli_set_charset($enlace, "utf8");
                if ($conexion) {
                } else {
                }
                return $conexion;
            }
            function disconnectDB($conexion)
            {
                $close = mysqli_close($conexion);
                if ($close) {
                } else {
                }
                return $close;
            }
            function getArraySQL($sql)
            {
                $conexion = connectDB();
                mysqli_set_charset($conexion, "utf8"); 
                if (!$result = mysqli_query($conexion, $sql))
                    die(); 
                $rawdata = array(); 

                $i = 0;
                while ($row = mysqli_fetch_array($result)) {
                     $rawdata[$i] = $row;
                     $i++;
                }

                disconnectDB($conexion); 
                return $rawdata; 
            }
            $myArray = getArraySQL($sql);
            echo json_encode($myArray, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | WITHOUT_ARRAY_WRAPPER),"n";
            ?>

One Answer

El quid de la cuestión está en la definición del método mysqli_fetch_array:

Obtiene una fila de resultados como un array asociativo, numérico, o ambos.

El o ambos, que he puesto intencionalmente en negritas, significa que si no indicas el tipo de array que quieres, la función asumirá que quieres un estilo MYSQLI_BOTH (valor por defecto) el cual creará un array tanto asociativo como numérico. Por eso tus datos se duplican.

La duplicidad desaparecerá cuando indiques cómo quieres el array. Esto se puede comprender al leer el apartado resulttypeen el Manual:

resulttype Este parámetro opcional es una constante que indica qué tipo de array debiera generarse con la información de la fila actual. Los valores posibles para este parámetro son las constantes MYSQLI_ASSOC, MYSQLI_NUM, o MYSQLI_BOTH.


Soluciones

Puedes entonces indicar cómo quieres tus datos.

a) Arreglo asociativo:

            while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
                 $rawdata[] = $row;
            }

O bien:

Puesto que el Manual dice que:

Al emplear la constante MYSQLI_ASSOC esta función se comportará de manera idéntica a mysqli_fetch_assoc()

Podemos hacerlo del siguiente modo, usando dicha función:

            while ($row = mysqli_fetch_assoc($result)) {
                 $rawdata[] = $row;
            }

b) Arreglo numérico:

            while ($row = mysqli_fetch_array($result,MYSQLI_NUM)) {
                 $rawdata[] = $row;
            }

O bien:

Puesto que el Manual dice que:

... con MYSQLI_NUM se comportará exactamente igual que la función mysqli_fetch_row()

Podemos hacerlo del siguiente modo, usando dicha función:

            while ($row = mysqli_fetch_row($result)) {
                 $rawdata[] = $row;
            }

NÓTESE: Que no es necesario implementar un contador $i, como estabas haciendo al principio. El array se creará solo, sin necesidad de ese contador.

Correct answer by A. Cedano on January 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP