Foros del Web » Programando para Internet » PHP »

consulta sql=Resource id #5

Estas en el tema de consulta sql=Resource id #5 en el foro de PHP en Foros del Web. Tengo una consulta sql a una base mysql de tal manera: $res=mysql_query("select dia,web from vid where id=6",$link); Y en local (mi ordenador) me funciona perfectamente ...
  #1 (permalink)  
Antiguo 08/01/2004, 15:49
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
consulta sql=Resource id #5

Tengo una consulta sql a una base mysql de tal manera:

$res=mysql_query("select dia,web from vid where id=6",$link);

Y en local (mi ordenador) me funciona perfectamente cuando hago $row=mysql_fetch_array($res), pero cuando lo subo al servidor no me funciona. Imprimiendo $res da como resultado:

Resource id #5

Lo he probado con muchos ids, y en local me sigue funcionando perfectamente, y he cambiado tambien la consulta a ver y no me funciona correctamente.

¿Como se hace esto bien para que funcione?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 08/01/2004, 16:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Si $res es distinto a false (como parece tu caso), es que no ha habido ningun error en la ejecucion de la consulta. Pero que una consulta se ejecute correctamente no quiere decir que tenga que devolver datos. Una consulta que devuelva 0 registros es valida. En tu caso puede ser que en tu base de datos remota no haya ningun registro para esos id. Prueba a examinar la base de datos remota con un administrador grafico, como puede ser phpMyAdmin.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 08/01/2004, 17:48
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Lo extraño es que si existen esos id, tengo paginas en las que se listan todos los registros y los veo delante de mis ojos. El registro de id=6 por ejemplo esta, pero no se muestra.

¿A nadie le ha pasado algo asi?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 09/01/2004, 06:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
¿Que código usas para recorrrer los resultados (record-set) que has generado ejecutando tu consulta SQL vía mysql_query() ?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/01/2004, 06:44
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Haz un
Código PHP:
echo mysql_num_rows($res); 
para ver el numero de registros devueltos.

Tambien revisa el HTML generado ("Ver->Codigo fuente" en tu navegador), no vaya a ser que si este generando los datos, pero que por otro lado haya un error que haga que no se vean.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 09/01/2004, 07:09
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
me explicare mejor..

Veamos que me concrete un poco mas:

La tabla contiene estas columnas:
id,web,dia. ID es primario y autonumerico, web es una direccion a una pagina y dia es un valor int para mostrar unos links al dia y se autoactualice la pagina a diario.
Consta de 5668 registros, de id del 6 al 5674. Todos con su dia y su id, y se imprime correctamente, lo he comprobado con la consulta:
"select * from vid". Todo correcto.

He hecho pruebas, he conseguido averiguar que no funciona ningun registro hasta el id=1122 (incluido). A partir de 1123 (incluido) funcionan todos perfectamente (aunque no los he probado que son muchos xD, pero he probado bastantes).

No lo logro entender, porque de la 1122 a la 1123 no hay diferencia alguna. Los resultados que he impreso de esos registros los he puesto por si sirven de algo. Los espacios son cambio de columna. He sustituido por 'pagina' las direcciones por si comprometo algo, por eso no funcionan, pero no creo que influya en mi duda:

1119 http://www.pagina.com/members/223.php 23
1120 http://pagina.com/gal/mov/68/ 23
1121 http://pagina.com/gal/mov/68/ 23
1122 http://pagina.com/cgi-bin/clicks.cgi?CA=914542-0000 23
1123 http://pagina.net/video/page9.htm 23
1124 http://pagina.com/24/index.htm 23
1125 http://www.pagina.net/samples/0596719/al4a.html 23

Al imprimir el registro del id 1122 tengo lo siguiente con este codigo:

Código PHP:
    echo "select dia,web from vid where id=".$idd."<br>";
    echo 
"res=".$res."; count(res)=".count($res)."; res[0]=".$res[0]."<br>";
    echo 
"<br>row=".$row;
    echo 
"<br>row[web]=".$row['web']."<br>";
    echo 
"Num rows=".mysql_num_rows($res)."<br>"
select dia,web from vid where id=1122
res=Resource id #5; count(res)=1; res[0]=

row=
row[web]=
Num rows=0


Y con el mismo codigo para id=1123:

res=Resource id #5; count(res)=1; res[0]=

row=Array
row[web]=http://pagina.com/gallery/0007/100075/
Num rows=1


Por cierto, tambien se me pide el codigo que utilizo, lo pego, es el siguiente:

Código PHP:

$idd
=$_GET["id"];
include(
"../conexion.php");
$link=Conectarse($host,$user,$pass,$base);
$res=mysql_query("select * from vid where id=".$idd$link);

    echo 
"select dia,web from vid where id=".$idd."<br>";
    echo 
"res=".$res."; count(res)=".count($res)."; res[0]=".$res[0]."<br>";
    echo 
"<br>row=".$row;
    echo 
"<br>row[web]=".$row['web']."<br>";
    echo 
"Num rows=".mysql_num_rows($res)."<br>"

Es curioso, la conclusion que saco de esto es que se imprimo el registro de id=1123, la columa web es la de id=6 (primer registro); el 1124 el segundo registro, el 1125 el tercero etc.

¿Porque me ocurre esto y como solucionarlo??

PD:No hay fallo en el codigo html (en el explorador>ver codigo fuente todo es normal, se muestra todo lo que hay).

Muchas gracias por la ayuda.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 09/01/2004, 07:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En Mysql tienes un montón de funciones para que puedas recorrer el record-set (resultado) que te arroja una consulta. Esas funciones son las "mysql_fetch_xxx()" donde xxx puede ser hacia un array (array) .. hacia un objeto (object) .. hacia un array asociativo (assoc) .. o una línea (row) por ejemplo.

Esas funciones de "fetch" seleccionan un registro de esa consulta arrojada y avanzan el puntero interno una posición hasta que llegan al final de esa consulta (record-set) entregando un "false" .. Así que . bajo estas circustancias .. se suele usar mucho un bucle tipo while() para recorrer ese record-set.

Tambien tienes funciones como mysql_result() .. para acceder a un registro/campo concreto de una consulta dada.

Código PHP:
$res=mysql_query("select * from vid where id='".$idd."'"$link) or die(mysql_error());
While (
$row=mysql_fetch_array($res)){
   echo 
"Campo WEB: ".$row['web'];

(ojo .. usè mysql_error() para detectar posibles errores en la consulta SQL o de conexión .. y comillas para el valor de "id").

(para este caso concreto .. podrías usar mysql_fetch_row() y no usar el bucle while() si estás seguro que esa consulta bajo esa condición "id=X" va arrojar un sólo resultado (registro).)

Eso lo describen en las funciones descritas en el manual oficial de PHP:

www.php.net/mysql

Y también en cualquier manual/tutorial de PHP+Msyql .. (en las FAQ's tienes).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 09/01/2004 a las 07:24
  #8 (permalink)  
Antiguo 09/01/2004, 07:44
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
He probado con mysql_fetch_row y tampoco me funciona, el resultado es logicamente el mismo. He puesto el 'or die(mysql_error())' en $res y se sigue devolviendo Resource id #5, y el $row esta vacio. Pero gracias por la ayuda.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 09/01/2004, 07:44
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
¿Esto de que base lo has sacado, de la tuya local o de la del servidor?¿Como generas el id que pasas por la URL, de la misma base de datos o es fija o la estas pasando a mano?

¿Y en que te basas para esta afirmacion?
Cita:
Es curioso, la conclusion que saco de esto es que se imprimo el registro de id=1123, la columa web es la de id=6 (primer registro); el 1124 el segundo registro, el 1125 el tercero etc.
Porque si es que es que miras en tu base de datos local el id=6 y coincide con los datos mostrados por el script remoto con el id=1123, puede ser que no hayas migrado bien los datos de tu base de datos local a la remota y por eso no coincidan los ids. Aunque borres todos los registros de una tabla, esa tabla recuerda cual es el proximo autoincremental que debe poner. Asi que si en tu vid remota tenias metidos 1122 registros y los borraste, el siguiente registro que insertaste en esa tabla tendria el id 1123.

Es que no se me ocurre que mas puede ser. Y si me dices que la consulta select * from vid en el remoto te muestra los indices desde el 6, pues directamente no se que puede ser. Porque el codigo me parece correcto.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 09/01/2004, 07:52
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
re

Lo primero lo he sacado de la base de datos del servidor, con otra pagina php imprimiendo todos los registros con un bucle while.

El id lo estoy pasando a mano en las pruebas, luego se pasara automaticamente (pero eso no influye ¿o si?).

Lo de
Cita:
Es curioso, la conclusion que saco de esto es que se imprimo el registro de id=1123, la columa web es la de id=6 (primer registro); el 1124 el segundo registro, el 1125 el tercero etc.
lo he sacado de hacer pruebas, y tengo en cuenta que los ids, aunque con registros borrados, no pierden la cuenta.

Efectivamente cuando muestro los registros de la base del servidor empiezan desde 6. (Es que hice unas pruebas antes). Del modo local ya me he olvidado, porque funciona perfectamente, pero en el servidor no. Todo lo que hago ahora lo hago directamente en el servidor.

Gracias por el interes de todos modos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 09/01/2004, 08:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Vamos a probar una bestialidad. Del listado de datos, apunta los datos del registro con id=69. Y luego haz este insert con esos datos:
Código PHP:
$sql="INSERT INTO vid (id,web,dia) VALUES (69,'la web que tenias','el dia que tenias');
mysql_query($sql) or die("
Error en $sql <br>MySQL dice".mysql_error()); 
Siendo id indice deberia pegarte un error. Si no te da error, prueba a pasar a tu script conflictido el id 69. Si te muestra el dato, sera que que antes no existia ese registro. ¿Por que no existia? Pues no lo se. ¿Por que te aparecia en el listado? Pues tampoco lo se.

Y prueba tambien a hacer:
Código PHP:
$sql="SELECT id FROM vid ORDER BY id DESC LIMIT 1";
$result=mysql_query($sql);
echo 
mysql_result($result,0,0); 
En teoria esto te dara el id mas alto de la tabla. Mira si coincide con tus espectativas (6+numero de registros).

Y tambien te recomendaria instalar en el servidor remoto el phpMyAdmin, para evitar posibles "contaminaciones" (se nota que veo CSI ) por parte de tus scripts (no digo que tengan errores, pero siempre es bueno tener un metodo objetivo) a la hora de comprobar los valores de la base de datos remota. Tambien te ayudara a probar la consulta que genera tu script. Siempre es bueno tener 2 formas distintas, te da una red de seguridad.

Y si todo esto falla, llama a un exorcista

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 09/01/2004, 08:54
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
re

Bueno creo que ya tengo marcados 5 numeros del telefono del exorcista :

Vale, concentremonos.

Al servidor no le puedo instalar nada porque no es mio (tengo una web gratis xD), pero si tiene un sistema de mysql por el que crear, insertar, ver, borrar... hacer todo y mas a traves de http. Pero tengo los mismos resultados por ese lado que en mi pagina ver.php, donde obtengo todos los registros de la tabla vid.

Bueno probe la bestialidad de insertar y

Código PHP:
$res=mysql_query("INSERT INTO vid (id,web,dia) VALUES (69,'MIWEBNUEVA',2)"$link) or die(mysql_error()); 
y como resultado (creo que es el die()):

Duplicate entry '69' for key 1

Asi que borro el registro 69 y inserto eso de ahi arriba:

Código PHP:
mysql_query("delete from vid where id=69",$link);
$res=mysql_query("INSERT INTO vid (id,web,dia) VALUES (69,'MIWEBNUEVA',2)"$link) or die(mysql_error()); 
Y haciendo esto y un echo $res obtengo mi querido 1 (true bieen ).

Ahora vemos la tabla con ver.php y:

68 http://pagina.com/movx/hipspy/gall001/index.htm 2
69 MIWEBNUEVA 2
70 http://pagina.com/empe42/indexd.html 2


Y en la pagina del script que me esta ya ********* tengo:

select dia,web from vid where id=69
res=Resource id #5; count(res)=1; res[0]=

row=
row[web]=
Num rows=0

De nuevo, asi que lo mismo de lo mismo. Y si no estoy loco ya poco me falta

Probando:

Código PHP:
$sql="SELECT id,web,dia FROM vid ORDER BY id DESC LIMIT 1";
$res=mysql_query($sql,$link);
$row=mysql_fetch_array($res);
echo 
$row["id"]."  ".$row["web"]."  ".$row["dia"]; 
Tenemos de resultado:

5674 http://www.pagina.com/movies/gal4_1/heather.php 114

Y el ultimo registro de ver.php (de la tabla):

5673 http://www.pagina.com/members/333.php 114
5674 http://www.pagina.com/movies/gal4_1/heather.php 114

No se, es que ya no se me ocurre nada . Esta confuso el tema.

Intuyo un if($id<=1122) $id+=1123-6; al final... :-p

Un saludo josemi y gracias.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #13 (permalink)  
Antiguo 09/01/2004, 09:19
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, yo aviso a mulder y scully porque esto es de expedienteX.

Por un lado tenemos este codigo
Código PHP:
$idd=$_GET["id"];
include(
"../conexion.php");
$link=Conectarse($host,$user,$pass,$base);
$res=mysql_query("select * from vid where id=".$idd$link); 
(supongo que un $row=mysql_fetch_array($res) directamente al final).

Por otro, la base de datos con todos los indices que pruebas.

Si sacas el listado, te da los id. Pero si pasas esos id a tu script, le añade 1117 al id de la base de datos para que salga (para que el id=6 salga cuando pasas el 1123).

Probemos otra cosa. En tu script maldito, no uses una variable para el id, pon directamente el 69 en la consulta. Si lo muestra, es que hay un "problema" con la recepcion del parametro o su tratamiento antes de la consulta.

Y otra cosa, los hostings gratuitos suelen tener desactivados el mostrar errores, asi que pon al principio de tu script un:
Código PHP:
error_reporting(E_ALL); 
Para ver cualquier mensaje de error.

Es que ya no se me ocurre ninguna otra prueba. Y tampoco se me ocurre porque el mismo codigo con los mismos datos (o semejantes) te funciona perfectamente en local y no en remoto.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #14 (permalink)  
Antiguo 09/01/2004, 11:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
De acuerdo SOLUCIONADO BIEEEN

Vale, que verguenza...

Como normalmente los problemas mas dificiles suelen ser los mas tontos he aqui la solucion:

La pagina del script estaba en un frame, pero no era mipagina.php, sino localhost/mipagina.php; porque sino en local no funcionaba, te hacia descargar mipagina.php como si fuera un archivo, y no lo ejecutaba. Ahora ya lo he cambiado por mipagina.php.

Por eso funcionaba en local y no en remoto. Y por eso me he roto la cabeza

Siento las molestias que les hubiera podido causar, pero mejor aprender del problema que lamentarse de él ¿no?


Un saludo a todos los que me han prestado apoyo
Hasta otra.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #15 (permalink)  
Antiguo 09/01/2004, 15:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
¿Y ahora que hago con las virgenes que iba a sacrificar para el exorcismo de tu servidor?

Errores de estos se comenten a patadas. Estoy harto de ver paginas en las que no se ven las imagenes porque esta el src a c:\misimagenes\imagen.gif, es decir, al disco duro local del creador. Y claro, cuando el se conecta desde su ordenador ve las imagenes de maravilla

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #16 (permalink)  
Antiguo 09/01/2004, 16:10
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Jeje, verdad verdad, por eso es bueno comprobarlo desde otro lado. Gracias otra vez.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 02:31.