Stack Overflow en español Asked by mono101 on January 27, 2021
El resultado de mi consulta php se muestra de la siguiente forma:
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";
?>
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 resulttype
en 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 constantesMYSQLI_ASSOC
,MYSQLI_NUM
, oMYSQLI_BOTH
.
Puedes entonces indicar cómo quieres tus datos.
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 amysqli_fetch_assoc()
Podemos hacerlo del siguiente modo, usando dicha función:
while ($row = mysqli_fetch_assoc($result)) {
$rawdata[] = $row;
}
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ónmysqli_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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP