2012-08-14 45 views
5

cada vez que ejecuto mysql_fetch_array se devuelve una matriz con valores duplicados p. Ej.mysql_fetch_array devuelve datos duplicados

Array 
(
    [0] => 1 
    [row_id] => 1 
    [1] => some text 
    [first_field] => some text 
    [2] => some text 
    [second_field] => some text 
} 

pero yo sólo quiero resultados individuales de la matriz, que han intentado usar

mysql_fetch_array($data, MYSQL_ASSOC); 

Pero esto no hace ninguna diferencia.

+0

inb4, PDO o mysqli –

+0

Muestra tu consulta y la estructura de tu tabla. – Jocelyn

+1

¡Por favor, no use la extensión 'mysql' más! Es mejor usar PDO o MySQLi. – ComFreek

Respuesta

12

Esta es la funcionalidad prevista de mysql_fetch_array(). Si no desea tener los "duplicados" y solo tiene la matriz asociativa, use mysql_fetch_assoc() en su lugar.

Ejemplo:

while ($row = mysql_fetch_assoc($data)) { ... } 
+3

'mysql_fetch_array ($ data, MYSQL_ASSOC);' hará exactamente lo mismo que mysql_fetch_assoc. – Jocelyn

+0

@Jocelyn Estoy enterado de eso, sin embargo, no hay forma de que 'MYSQL_ASSOC' devuelva una matriz con la salida mostrada OP, según el [manual] (http://php.net/manual/en/function .mysql-fetch-array.php). – newfurniturey

+0

@ mk_89 Acabo de probar con 'mysql_fetch_array ($ data, MYSQL_ASSOC)' y no puedo replicar (es decir, está funcionando como debería) así que no puedo responder por qué fallaría en su caso. Intenta usar 'mysql_fetch_assoc()' y ver si eso resuelve el problema. – newfurniturey

0

Desde el manual:

Devuelve una matriz de cadenas que corresponde a la fila recuperada, o FALSE si no hay más filas. El tipo de matriz devuelta depende de sobre cómo se define result_type. Al usar MYSQL_BOTH (predeterminado), obtendrá una matriz con índices tanto asociativos como numéricos. Usando MYSQL_ASSOC, solo obtiene índices asociativos (como mysql_fetch_assoc() funciona), usando MYSQL_NUM, solo obtiene índices de número (como mysql_fetch_row() funciona).

En otras palabras, dado que MYSQL_BOTH es el valor predeterminado, se devuelven ambos. Puede especificar MYSQL_ASSOC o MYSQL_NUM en su lugar para volver a obtener una matriz asociativa o una matriz numérica. También podría usar mysql_fetch_assoc() que solo devolverá una matriz asociativa.

+0

El OP ya probó MYSQL_ASSOC. – Jocelyn

1

Uso mysql_fetch_assoc() para array associtive, o mysql_fetch_row para una matriz numérica

+0

'mysql_fetch_array ($ data, MYSQL_ASSOC);' hará exactamente lo mismo que mysql_fetch_assoc. – Jocelyn

0

mysql_fetch_array() devuelve una matriz que contiene las dos teclas asociativos (los nombres de campo especificados por las consultas) y la clave posición número entero (es decir, 0 es el primer campo, 1 , es segundo, etc.). Esto es por conveniencia para acceder a los datos por cualquiera de los métodos.

si solo desea las claves con nombre, debe usar mysql_fetch_assoc() o mejor aún, use las funciones de mysqli ya que todos aquí lo atacarán por utilizar las antiguas funciones de mysql_ *.

+0

'mysql_fetch_array ($ data, MYSQL_ASSOC);' hará exactamente lo mismo que mysql_fetch_assoc. – Jocelyn

+0

@Jocelyn Sí lo hará. Sin embargo, no entiendo el voto negativo, ya que la mayoría de los desarrolladores que estaban familiarizados con el uso de las antiguas funciones mysql_ * durante cualquier período de tiempo normalmente usarían mysql_fetch_assoc y no tendrían que preocuparse por establecer el indicador adecuado en la llamada a la función. –

3

mysql_fetch_array devuelve el conjunto de resultados devuelto como respuesta a la ejecución de la consulta como matrices asociativas y numéricas. Para devolver los resultados como una matriz asociativa, debe usar la función mysql_fetch_assoc. Para devolver resultados como matriz numérica, necesita usar la función mysql_fetch_row.

0

mysqli_fetch_array($result, MYSQL_ASSOC) esto ha funcionado para mí como se sugirió anteriormente para mysql_fetch_assoc, en PHP5.5 está en desuso ahora.

Cuestiones relacionadas