MySQL fetch array agrega valores duplicados?

Estoy obteniendo esto:

Array ( [0] => 1 [id] => 1 [1] => 778613c4344dbc9565c359c1154c6a18 [session] => 778613c4344dbc9565c359c1154c6a18 [2] => fn [first_name] => fn [3] => ln [last_name] => ln [4] => un [username] => un [5] => 016e6128e8ca9dda1b310c364d9b622c [password] => 016e6128e8ca9dda1b310c364d9b622c [6] => address [email] => address [7] => 100 [permission] => 100 [8] => 10 [year_level] => 10 [9] => [department] => [10] => Sample [campus] => Sample [11] => 0 [logo_url] => 0 ) 

Después de ejecutar esto

 $user = mysql_fetch_array(mysql_query("SELECT session FROM users WHERE username='$cookie[username]' AND first_name='$cookie[first_name]' AND last_name='$cookie[last_name]' AND campus='$cookie[campus]' AND id='$cookie[id]'")) 

¿Alguna idea de por qué se duplica así? Gracias

EDITAR: Creo que la clave principal es hacer esto. ¿Alguna idea sobre cómo detenerlo?

Si no especifica un tipo de resultado como un segundo parámetro, mysql_fetch_array() tendrá por defecto MYSQL_BOTH (cotizando) :

Al usar MYSQL_BOTH (predeterminado), obtendrá una matriz con índices tanto asociativos como numéricos .

Si esto no es lo que quiere, debe pasar un segundo parámetro a esa función, para indicar qué tipo de resultados desea.

Por ejemplo, para obtener solo una matriz asociativa con nombres de columnas como claves:

 $result = mysql_query("SELECT session FROM users WHERE username='$cookie[username]' AND first_name='$cookie[first_name]' AND last_name='$cookie[last_name]' AND campus='$cookie[campus]' AND id='$cookie[id]'"); $user = mysql_fetch_array($result, MYSQL_ASSOC); 

Como nota al margen :

  • Asegúrese de estar escapando de las variables que inyecta en su consulta, para evitar Inyecciones SQL , utilizando, por ejemplo, mysql_real_escape_string()
  • Antes de usar mysql_fetch_array() , debe probar si mysql_query() fue exitoso,
  • Y, especialmente para un proyecto nuevo, debe usar mysqli o PDO , y no las antiguas funciones de mysql_* – vea Elegir una API .

Pruebe el segundo parámetro MYSQL_ASSOC o MYSQL_NUM. MYSQL_BOTH está activado de forma predeterminada, y regresa con las teclas numéricas y de campo.

Pascal MARTIN ya explicó la razón detrás de esto.

Te diré que uses mysql_fetch_assoc Te dará solo la matriz asociada. La parte numérica no estará presente.