Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] No me aparecen todas las Bases de Datos

Estas en el tema de No me aparecen todas las Bases de Datos en el foro de PHP en Foros del Web. Hola: Pues pongo aqui mi primera duda dentro de este subforo. Resulta que he estado aprendiendo mysql. Para ello he usado el intérprete que trae. ...
  #1 (permalink)  
Antiguo 16/10/2013, 05:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
No me aparecen todas las Bases de Datos

Hola:

Pues pongo aqui mi primera duda dentro de este subforo.
Resulta que he estado aprendiendo mysql. Para ello he usado el intérprete que trae.
Después de un tiempo, pues ya tengo varias bases de datos entre las creadas por mi, las creadas por otras aplicaciones, como phpMyAdmin y las que existen por defecto.

Pues bien, ahora paso a PHP e intento hacer mi primera conexión. Sin problemas.
Pero ahora hago mi primera consulta, para saber las Bases de Datos que tengo creadas, pero sólamente me aparecen 2 de ellas, que además son de las que crea mysql en la instalación.
En concreto sólo me aparecen information_schema y test

Para conectarme con el intérprete lo hago en la forma:
Código:
mysql -h localhost -u "user" - p (y tecleo la "clave")
Para hacerlo desde PHP hago:
Código:
$servidor="localhost";
$usuario="user";
$clave="clave";
$miConexion =mysqli_connect($servidor,$usuario,$clave) or die ("Fallo etc...");
$result = mysql_query("SHOW DATABASES");        
while ($row = mysql_fetch_array($result)) {        
echo $row[0]."<br>";
}
Y sólo me aparecen las anteriormente mencionadas information_schema y test

¿Alguien sabe qué me puede estar pasando?
Gracias por adelantado.
  #2 (permalink)  
Antiguo 16/10/2013, 05:59
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: No me aparecen todas las Bases de Datos

Cita:
Iniciado por dehm Ver Mensaje
Hola:

Pues pongo aqui mi primera duda dentro de este subforo.
Resulta que he estado aprendiendo mysql. Para ello he usado el intérprete que trae.
Después de un tiempo, pues ya tengo varias bases de datos entre las creadas por mi, las creadas por otras aplicaciones, como phpMyAdmin y las que existen por defecto.

Pues bien, ahora paso a PHP e intento hacer mi primera conexión. Sin problemas.
Pero ahora hago mi primera consulta, para saber las Bases de Datos que tengo creadas, pero sólamente me aparecen 2 de ellas, que además son de las que crea mysql en la instalación.
En concreto sólo me aparecen information_schema y test

Para conectarme con el intérprete lo hago en la forma:
Código:
mysql -h localhost -u "user" - p (y tecleo la "clave")
Para hacerlo desde PHP hago:
Código:
$servidor="localhost";
$usuario="user";
$clave="clave";
$miConexion =mysqli_connect($servidor,$usuario,$clave) or die ("Fallo etc...");
$result = mysql_query("SHOW DATABASES");        
while ($row = mysql_fetch_array($result)) {        
echo $row[0]."<br>";
}
Y sólo me aparecen las anteriormente mencionadas information_schema y test

¿Alguien sabe qué me puede estar pasando?
Gracias por adelantado.
Veo tres cosas:

mezclas mysqli con mysql, los parámetros de mysqli_query no están completos (solo tienes uno) y que dentro del while indicas la key 0, por lo que solo te mostrará la key 0.

prueba a cambiar el mysql por mysqli, pasa el otro parámetro que te falta en mysqli_query y quita la key 0, simplemente pasas el array devuelto por fetch array a otro array y lo recorres con un foreach mostrando los resultados a ver si así sí te funciona.

saludos
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 17/10/2013, 03:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Mensaje Respuesta: No me aparecen todas las Bases de Datos

Hola guardarmicorreo:

Gracias por las aclaraciones. Creo que ahora lo estoy haciendo bien, pero me sigue sin mostrar todas las bases de datos que tengo actualmente:
Código:
$servidor="localhost";
$usuario="usuario";
$clave="clave";
$miConexion =mysqli_connect($servidor,$usuario,$clave) or die ("mensaje de error....");
$result = mysqli_query($miConexion, "SHOW DATABASES");
$row = mysqli_fetch_array($result, MYSQLI_NUM);
		
foreach ($row as $nombre)
{        
echo $nombre."<br>";
}
mysqli_close($miConexion);
Ahora sólo me muestra una de ellas

Última edición por dehm; 17/10/2013 a las 03:38 Razón: no había puesto el segundo parametro en $row = mysqli_fetch_array($result);
  #4 (permalink)  
Antiguo 17/10/2013, 04:26
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: No me aparecen todas las Bases de Datos

Cita:
Iniciado por dehm Ver Mensaje
Hola guardarmicorreo:

Gracias por las aclaraciones. Creo que ahora lo estoy haciendo bien, pero me sigue sin mostrar todas las bases de datos que tengo actualmente:
Código:
$servidor="localhost";
$usuario="usuario";
$clave="clave";
$miConexion =mysqli_connect($servidor,$usuario,$clave) or die ("mensaje de error....");
$result = mysqli_query($miConexion, "SHOW DATABASES");
$row = mysqli_fetch_array($result, MYSQLI_NUM);
		
foreach ($row as $nombre)
{        
echo $nombre."<br>";
}
mysqli_close($miConexion);
Ahora sólo me muestra una de ellas
Prueba con show schemas
Si no te funciona entonces lo más probable es que no sea problema de código, sino de permisos en el propio MYSQL. Por lo tanto este tema si lo ve un moderador que lo pase al foro de MYSQL.

Me parece que no puedes utilizar show databases por permisos.

En el manual de mysql dice lo siguiente

Cita:
En MySQL 5.0, ve sólo las bases de datos para las que tiene alguna clase de permiso, si no tiene el permiso SHOW DATABASES .
Si es un servidor remoto y no eres administrador de la BD utiliza SHOW GRANTS para ver qué permisos tienes. Si el resultado es que tienes ALL PRIVILEGES entonces no podrás darte nuevos permisos.

Si eres el administrador root de la BD entonces te puedes dar permisos.

Para darte permisos SUPER debes utilizar, si no lo escribo mal

Código SQL:
Ver original
  1. GRANT SUPER ON `*` TO 'tu usuario'@'%' IDENTIFIED BY password 'tu password'

Saludos!
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 23/10/2013, 05:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: No me aparecen todas las Bases de Datos

Hola:

Ante todo, gracias de nuevo por la respuesta, y disculpa que la mía no haya llegado tan rápidamente.
La verdad es que estas cosas de PHP las hago a salto de mata, y cuando tengo algo más de tiempo, y además, quería darle un buen repaso al tema de permisos a ver si iban por ahí los tiros.

Realmente, no especifiqué que me estaba conectando con la cuenta root@localhost;

En concreto, en el script el contenido de las variables son:
Código:
$servidor="localhost";
$usuario="root";
$clave="clave";
Por si las moscas me he creado varios usuarios con diferentes tipos de priviliegios, pero incluso creando uno con todos los privilegios, no tengo acceso a todas las bases de datos desde el script que he mostrado. (SI lo tengo desde el intérprete de comandos).
Por eso pienso que el error no es de privilegios, sino de algo que no hago bien en PHP.

Saludos
  #6 (permalink)  
Antiguo 03/12/2013, 14:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: No me aparecen todas las Bases de Datos

Bueno, aunque han pasado semanas, marco el tema como solucionado porque ya empiezo a saber algo de PHP. El problema era que no extraía las filas como array asociativo.
Dudo que a alguien le pueda ser útil una cosa tan básica, pero dejo el código que ya me funciona:

Código:
$conexion = mysqli_connect($_SESSION['host'],$_SESSION['nombre'],$_SESSION['clave']) or die ("Errores de conexion");
	$consulta = "SHOW DATABASES";
	$resultado = mysqli_query($conexion, $consulta) or die ("No puedo ejecutar la consulta");
	while($fila= mysqli_fetch_assoc($resultado))
	{
		foreach ($fila as $campo=>$valor)
		{
			echo $campo."->".$valor;
		}
	}
	mysqli_free_result($resultado);
	mysqli_close($conexion);

Etiquetas: bases, mysql, todas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:33.