Hola como estan?
Estoy haciendo una web y al momento de recorrer un Array con un while, me aparece la palabra "Array" en al web :-\
Lo estoy haciendo de la siguiente forma:
Tengo una clase donde esta la funcion "mysql_fetch_array" (la clase ya esta instanciada en otra parte del codigo):
public function resultadoQuery($busqueda)
{
$this->busq=mysql_fetch_array($busqueda);
return $this->busq;
}
Y en el codigo principal estoy haciendo esto:
<?php
$busq=$conexion->ejecutarQuery("SELECT nombre,apellido FROM alumnos WHERE
colegio='$_POST[colegio]' ORDER BY apellido,nombre ASC");
if( $_POST['colegio'] == "Pedro B. Palacios 1º (ESB)")
{
echo '<table border="1px">
<thead>
<tr>
<th>Apellido y Nombre</th>
<th>Nota</th>
</tr>
</thead>';
while($alumnos= $conexion->resultadoQuery($busq))
{
echo '<tr>
<td>'.$alumnos['apellido'].' '.$alumnos['nombre'].'</td>
<td><input type="text" maxlength="2" name="nota" /></td>
</tr>';
}
echo '</table>';
}
?>
Lo que esta ocurriendo es que antes de imprimir la tabla, imprimer 2 veces la palabra "Array", yo creo que la imprime 2 veces a la palabra porque tambien son 2 los registros que se imprimen por la consulta a la BD.
Probando, descubri que si al while lo modifico de la siguiente forma:
while($alumnos= mysql_fetch_array($busq))
O sea, si pongo directamente la funcion la palabra "Array" no aparece. Pero la idea es usas la clase.
Tambien lo que me parece raro es que "Array" aparezca antes de la tabla.
No se si se entendio del todo mi consulta. Cualquier cosa avisenme que pongo los detalles que necesiten.
Muchas gracias.
La funcion mysql_fetch_array devuelve una matriz asociativa por defecto...
Ejemplo:
mysql> describe nombres;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| nombre | char(20) | YES | | NULL | |
| apellido | char(20) | YES | | NULL | |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
<?php
$connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$connect);
$sql = mysql_query("select * from nombres limit 1");
while($row = mysql_fetch_array($sql)){
echo $row['nombre'];
}
?>
Salida:
Juan
Pero lo que haces es lo siguiente:
<?php
$connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$connect);
$sql = mysql_query("select * from nombres limit 1");
while($row = mysql_fetch_array($sql)){
echo $row;
}
?>
Salida:
Array
Te recomiendo que al metodo resultadoQuery le agreges otro parametro que puede ser un parametro opcional que devuelva el tipo de matriz que devolvera la funcion mysql_fetch_array (http://www.idiota.es/php/function.mysql-fetch-array.html).
Saludos.
Gracias por tu respuesta ~ Yoya ~ pero segun tu explicacion de porque esta saliendo la palabra Array es porque estoy haciendo algo como lo que pusiste en tu ejemplo:
<?php
$connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$connect);
$sql = mysql_query("select * from nombres limit 1");
while($row = mysql_fetch_array($sql)){
echo $row;
}
?>
Array
Pero comparando este codigo con el mio, yo en ningun momento hago un echo de la matriz.
En mi ejemplo, la matriz se llama $alumnos y en ningun lado hago
echo $alumnos;
Es mas, lo que estoy haciendo es lo que hiciste vos:
while($row = mysql_fetch_array($sql)){
echo $row['nombre'];
Juan
y yo hago:
while($alumnos= $conexion->resultadoQuery($busq))
{
echo '<tr>
<td>'.$alumnos['apellido'].' '.$alumnos['nombre'].'</td>
<td><input type="text" maxlength="2" name="nota" /></td>
</tr>';
}
Perez Juan
Además, esta misma clase la estoy usando en otro codigo y tambien me aparece "Array". Que no creo que en ese otro codigo este haciendo "echo $matriz" :-\
Ps disculpa, me fije que mostraba array y mire xD....
si pones directamente y funciona ps seria problema de la clase o pueda ser que tengas un error...
Puedes poner la clase que hiciste y el source original pero quitandole las tablas, divs, etc...
Yo hice una clase similar para ver si me sucedia lo mismo y ps no, salio todo normal...
<?php
class ejemplo
{
private $connect;
public function query($sql)
{
$this->connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$this->connect);
$query = mysql_query($sql,$this->connect);
return $query;
}
public function resultadoQuery($sql)
{
return mysql_fetch_array($sql);
}
}
$sql = new ejemplo;
$result = $sql->query('select * from nombres limit 1');
while($row = $sql->resultadoQuery($result)){
echo $row['nombre'];
}
?>
Ya lo pude resolver, muchas gracias igualmente ~ Yoya ~
El problema era que una propiedad tenia el mismo nombre que una metodo y cuando ponia $this->(nombre de la propiedad) se confundia con el metodo. Algo loco porque ese metodo necesita parametro y en ningun momento imprime algo jeje. Pero bue parece que era eso porque lo modifique y ahora anda.