Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Error al validar resultado de query

Estas en el tema de Error al validar resultado de query en el foro de PHP en Foros del Web. Buenas, estoy creando una aplicación y un sitio web y por motivos de seguridad como he leido en vez de usar el usuario root, he ...
  #1 (permalink)  
Antiguo 18/02/2014, 05:55
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Error al validar resultado de query

Buenas,
estoy creando una aplicación y un sitio web y por motivos de seguridad como he leido en vez de usar el usuario root, he creado dos usuarios, un administrador y un visititante para el sitio web:

GRANT SELECT, INSERT, UPDATE, DELETE, ALTER, SHOW VIEW ON `datos`.* TO 'admin'@'%';

GRANT SELECT ON `datos`.* TO 'anonimo'@'%';

El problema es que uso wampserver y se me conecta automaticamente a root. Podría se que root no tiene contraseña, ya que no le puse ninguna por el momento porque se la puse una vez y me dio problemas, ya que no me la reconocía.

La cosa es que a través de mi script me conecto, con sus respectivas funciones:
Cita:
Editado: Código de programación no permitido en foros de Bases de DAtos
Y nada, no me realiza ninguna consulta y simplemente me da error:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in....

Si alguien puede ayudarme se lo agradecería.
Un saludo

Última edición por gnzsoloyo; 18/02/2014 a las 08:36
  #2 (permalink)  
Antiguo 18/02/2014, 07:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Usuario Mysql

Cita:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in....
mysql_num_rows() espera un parametro que debe ser un recurso, se lea ha dado un boolean

Ese es el error o aviso que te da y no tiene nada que ver con lo que nos cuentas.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/02/2014, 08:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Usuario Mysql

Cita:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in....
Esto es un fallo a nivel de PHP, no de MySQL, pero para el caso tienes que recordar que para usar funciones que recuperen datos de una consulta enviada por PHP, la consulta debe haber devuelto datos en forma de tabla.
Esto es importante porque las queries de sentencias DDL como CREATE, DROP, ALTER, y DCL como TRUNCATE, SET, etc. no devuelven datos. Devuelven códigos de éxito o error, pero no tablas de datos.
Por otro lado, las SELECT si devuelven datos en forma de tabla, pero otras DML como DELETE o UPDATE no.
Para verificar que algo que no es un SELECT haya sido exitoso, se verifica el codigo de éxito en el lenguaje que corresponda, pero no se usa leer registros que no existen. En el caso que te ocupa, debe devolver un booleano, por ende no estás leyendo correctamente.
Además, si lo que se ejecutó es un SELECT y no devuelve datos, (cosa que debes verificar antes de leerlos), lo que puee suceder es que no se cumplan las condiciones de la query, que no haya datos, que las variables estén mal, o simplemente que haya un error de sintaxis...

¿Se comprende el tema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 18/02/2014, 10:53
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Usuario Mysql

Sisi ya, pero la historia es que la consulta está bien hecha y quiero realizar esa funcion de PHP. Digo que esta bien hecha porque la realizo con el usuario root y hace todo correctamente.
Es decir:
$conexion = mysql_connect("localhost","root","");
mysql_select_db("grcalvosl",$conexion);

y realiza la consulta que es un select.
  #5 (permalink)  
Antiguo 18/02/2014, 10:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Usuario Mysql

Cita:
Sisi ya, pero la historia es que la consulta está bien hecha
Eso lo sabes tu. Nosotros no la vemos.
Cita:
y quiero realizar esa funcion de PHP. Digo que esta bien hecha porque la realizo con el usuario root y hace todo correctamente.
Pues lo que tienes en ese caso es un error en la forma que validas en PHP, no con MySQL.

Paso el post a PHP y, por favor, postea todo el código de ese script. Completo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/02/2014, 11:08
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Sí, perdón el código es el siguiente:
Código PHP:
<?php 
$conexion 
=  mysql_connect("localhost","grcsl_admin","");
mysql_select_db("grcalvosl",$conexion);
mysql_query ("SET NAMES 'utf8'");
$registros mysql_query("SELECT * FROM noticia ORDER BY id DESC",$conexion);
                if(
mysql_num_rows($registros)==0
                {
                    echo 
mysql_error($conexion);
                    
?>
                    <div id="error">
                        <div id="gr">
                            No hay noticias almacenadas en la base de datos.
                        </div>
                        <div id="iconos0">
                            <div><a href="alta.php"><img src="../iconos/nuevo.png">Nueva Noticia</a></div>
                        </div>
                    </div>
                    <?php 
                

                else
                {
                    
?>
                    <div id="cont1">
                        <table>
                            <tr>
                                <td id="f1"><b>Titular</b></td>
                                <td id="f1"><b>Fecha de Publicación</b></td>
                            </tr>
                            <?php 
                            
while($fila mysql_fetch_array($registros))
                            {
                                
?>
                                <tr>
                                    <td><?php echo $fila["tit"];?></td>
                                    <td><?php echo date("d-m-Y H:i:s",strtotime($fila["f_pub"]));?></td>
                                    <td id="opcs"><a href="ficha.php?eleg=<?php echo $fila["id"];?>" title="Detalles"><img src="../iconos/mostrar.png"></a></td>
                                </tr>
                                <?php 
                            
}
                            
?>
                        </table>
                    </div>
                    <?php 
                
}
La tabla de esa consulta es la siguiente:
--
-- Base de datos: `grcalvosl`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `noticia`
--

CREATE TABLE IF NOT EXISTS `noticia` (
`id` int(255) unsigned NOT NULL AUTO_INCREMENT,
`tit` varchar(24) NOT NULL,
`categ` enum('General','Actividades','Grupos','Instalacion es','Tarifas','Competicion') NOT NULL,
`f_pub` datetime NOT NULL,
`descrip` varchar(200) NOT NULL,
`img` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Volcado de datos para la tabla `noticia`
--

INSERT INTO `noticia` (`id`, `tit`, `categ`, `f_pub`, `descrip`, `img`) VALUES
(1, 'Inauguración Portal Web', 'General', '2013-11-14 00:00:00', 'A partir de hoy, nuestro centro deportivo dispondrá de un sitio web dónde estará toda la información e interés acerca del centro, entre otras muchos servicios.', '/GimnasioRaulCalvo/noticias/imagenes/1.jpg'),
(2, 'Nuevas Actividad: Boxeo', 'Actividades', '2013-11-14 00:00:00', 'En fechas próximas, se va a impartir una nueva actividad muy reclamada como es el boxeo. Crearemos grupos de 26 personas, los cuales se impartirán en horarios que próximamente publicaremos. 1234567890', '/GimnasioRaulCalvo/noticias/imagenes/2.jpg'),
(3, 'Oferta Judo', 'Tarifas', '2013-11-26 12:39:49', 'Al inscribirse en cualquier arte marcial, el Judo para adultos gratis.', '/GimnasioRaulCalvo/noticias/imagenes/3.jpg');

Muchas gracias pos vuestra ayuda!
  #7 (permalink)  
Antiguo 18/02/2014, 11:17
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Añadir que ahora hice mysql_error() y me dio el error: No database selected, y el nombre de la BD está bien y e usuario con permisos para esa BD...
  #8 (permalink)  
Antiguo 18/02/2014, 11:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error al validar resultado de query

OK. La pregunta es, entonces, por qué no la está seleccionando si la coenxión es correcta.
Si el nombre es correcto, pero estás trabajando en un servidor Linux, tienes que tener cuidado con las mayusculas, si correpondiese, ya que Linux es sensible a mayusculas/minusculas, y las bases de datos son carpetas en el disco, por tanto están afectadas por el S.O.
Si no es el caso, verifica con cuidado el nombre que tienen con un SHOW DATABASES.

Por otro lado, te haré un par de notas respecto a la tabla:

Código MySQL:
Ver original 
Esto está mal. Un INT nunca puede tener una representación de 255 caracteres. El numero más grande que puede ir es 11, y no representa el rango del número, sino que se usa para otra cosa.
Código MySQL:
Ver original
  1. UNIQUE KEY `id` (`id`)
Esto es innecesario. Un campo declarado como PRIMARY KEY por definición es UNIQUE, aunque no lo declares. Al ponerlo como UNIQUE en esta forma estás duplicando la indexación.

Verifica la base o la conexión.

Por cierto: ¿Es un host o estu propia PC?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 18/02/2014, 13:15
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Muchas gracias por tu anotaciones, con respecto a la tabla se me creó así a través de PHPMyadmin y solo exporte el código, de todas formas, lo reviso y modifico como me comentas!
Con respecto al tema, no uso Linux uso wampserver.
Mucgas gracias!
  #10 (permalink)  
Antiguo 18/02/2014, 18:30
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Buenas, aquí sigo dándole vueltas al tema y la verdad es que no me reconoce la base de datos, ya que he hecho el SHOW DATABASES y solo me muestra 2 bases de datos, ¿puede ser que no haya asignado ningún permiso global?? Solo he aplicados permisos especificos ya que no me interesa algunas tablas para este usuario.
Este es el siguiente codigo exportado de phpmyadmin del usuario:
GRANT USAGE ON *.* TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.* TO 'grcsl_anonimo'@'%' WITH GRANT OPTION;

GRANT SELECT ON `grcalvosl`.`precio` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`clase` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`noticia` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`sala` TO 'grcsl_anonimo'@'%';

GRANT SELECT (edad, categ, tipo, activ, id) ON `grcalvosl`.`grupo` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`se_descuenta` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`oferta` TO 'grcsl_anonimo'@'%';

GRANT SELECT ON `grcalvosl`.`actividad` TO 'grcsl_anonimo'@'%';

Un saludo.
  #11 (permalink)  
Antiguo 18/02/2014, 18:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error al validar resultado de query

Pues hagamos una prueba sencilla: Intenta conectarte con el root, o con un usuario que tenga todos los privilegios sobre la base. Crealo de ser necesario.
Si el script con ese usuario funciona, entonces es problema de permisos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 18/02/2014, 18:52
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Vale, entonces creo un usuario con todos los privilegios globales y pruebo con ese no?

Una duda que se me ocurre, la página web va a estar en un servidor subida, entonces que tipo de servidor tengo que poner en la creación del usuario??

Muchas gracias por tu ayuda!
  #13 (permalink)  
Antiguo 18/02/2014, 18:59
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Acabo de probar eso que me dijo y nada, sigue igual, me sale el mismo error: no se reconoce la base de datos. Aqui le escribo la consulata aunque lo hice a traves de PHPmyadmin.
En el apartado de privilegios de la base de datos de phpmyadmin la columna conceder me aparece no al igual que los usuarios que cree anteriormente.
  #14 (permalink)  
Antiguo 18/02/2014, 19:11
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Error al validar resultado de query

el problema es el uso de grant... por lo que veo es un statement of mysql server y no de php ... la version para php creo que sigue este modelo:

Código PHP:
Ver original
  1. $sql = "CREATE USER '" . $dbName . "'@'localhost' IDENTIFIED BY '" . $privilege_passwd . "'";
  2. $result = mysqli_query($link, $sql);
  3. $sql = "GRANT SELECT , INSERT , UPDATE , DELETE ON " . $dbName . " . * TO '" . $dbName . "'@'localhost' IDENTIFIED BY '" . $privilege_passwd . "'";
  4. $result = mysqli_query($link, $sql);

tambien que el usuario que usas pára crear a los otros no tiene los privilegios necesarios...

aun asi el error de bolean es un error de php y las funciones con extencion mysql ya no se usa te recomiendo mysqli orientado a objetos
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #15 (permalink)  
Antiguo 18/02/2014, 19:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

El usuario que creo para crear los otros es root, es decir, tiene todos los privilegios.
El caso no es la función de php si no que cuando me conecto desde el usuario nuevo no tiene los privilegios y por lo que no puede acceder a la BD, a pesar de habérselo asignado en phpmyadmin...
  #16 (permalink)  
Antiguo 18/02/2014, 19:48
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Error al validar resultado de query

entonces hay algún problema con tu phpmyadmin o con tu servidor local...
intenta mediante php usando root asignar los privilegios a los otros usuarios... y si te devuelve algun error entonces lo posteas aqui pero creo que este post deberian de mudarlo a mysql... no php
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #17 (permalink)  
Antiguo 21/02/2014, 20:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Buenas, era un problema de usuarios, había usuarios creados por phpmyadmin de inicio y iniciaba sesión con ellos en ve de con los que yo creer para la aplicación.
  #18 (permalink)  
Antiguo 21/02/2014, 21:01
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Error al validar resultado de query

entonces tu aplicación si corría... que bien que tengas buen dia
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #19 (permalink)  
Antiguo 21/02/2014, 21:58
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al validar resultado de query

Siii! las cosas que te dan corage.. que te qedas estancado por una pamplina..
Muchas gracias por la ayuda!
Buen diaa!

Etiquetas: mysql, select, sql, usuario, usuarios
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 03:24.