Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Código funciona en PHP4 pero no en PHP5

Estas en el tema de Código funciona en PHP4 pero no en PHP5 en el foro de Mysql en Foros del Web. Hola! Tengo un pequeño portal prefabricado (MKPortal) con un foro prefabricado (IPB). El servidor donde lo tengo alojado usaba todavía PHP4 y recientemente han actualizado ...
  #1 (permalink)  
Antiguo 24/02/2013, 12:22
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Código funciona en PHP4 pero no en PHP5

Hola!

Tengo un pequeño portal prefabricado (MKPortal) con un foro prefabricado (IPB). El servidor donde lo tengo alojado usaba todavía PHP4 y recientemente han actualizado a PHP5. A raíz de esta actualización algunos códigos dejaron de funcionar... googleando he conseguido q todos funcionen menos uno y me tiene desesperado. Mi conocimiento de PHP es casi nulo.

Este es el código q en PHP4 funcionaba perfectamente:
Código PHP:
$DB->query("SELECT t.*, p.*, me.avatar_location, m.view_avs, me.avatar_size, m.id as member_id, m.name AS  member_name, m.mgroup, f.name AS forum_name
                                                FROM ibf_posts p
                                                 LEFT JOIN ibf_forums f on (t.forum_id=f.id)
                                                 LEFT JOIN ibf_topics t on (t.tid=p.topic_id and t.approved=1 and t.moved_to IS NULL)
                                                 LEFT JOIN ibf_members m on (p.author_id=m.id)
                                                 LEFT JOIN ibf_member_extra me on (m.id=me.id)
                                                WHERE state!='closed' AND approved=1 AND (moved_to IS NULL or moved_to='') $qe
                                                GROUP BY t.last_post
                                                   ORDER BY t.last_post DESC
                                                LIMIT 0,$limit"
); 
Ahora en PHP5 me da mySQL error 1054 Unknown column 't.forum_id' in 'on clause'

En otros códigos he solucionado el problema añadiendo "()" en el FROM pq consultaba más de una tabla, pero en este caso no soy capaz de encontrar el error de sintaxis.

A ver si alguien puede ayudarme. Muchas gracias!

1 saludo...
  #2 (permalink)  
Antiguo 24/02/2013, 16:01
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Código funciona en PHP4 pero no en PHP5

hace una cosa:
cambia la query por esta:
$DB->query("SELECT *, me.avatar_location, m.view_avs, me.avatar_size, m.id as member_id, m.name AS member_name, m.mgroup, f.name AS forum_name
FROM ibf_posts p
LEFT JOIN ibf_forums f on (t.forum_id=f.id)
LEFT JOIN ibf_topics t on (t.tid=p.topic_id and t.approved=1 and t.moved_to IS NULL)
LEFT JOIN ibf_members m on (p.author_id=m.id)
LEFT JOIN ibf_member_extra me on (m.id=me.id)
WHERE state!='closed' AND approved=1 AND (moved_to IS NULL or moved_to='') $qe
GROUP BY t.last_post
ORDER BY t.last_post DESC
LIMIT 0,$limit");
  #3 (permalink)  
Antiguo 25/02/2013, 04:47
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Código funciona en PHP4 pero no en PHP5

Hola Patriarka... muchas gracias por la sugerencia... pero me sigue dando el mismo error...

Código:
mySQL query error: SELECT *, me.avatar_location, m.view_avs, me.avatar_size, m.id as member_id, m.name AS  member_name, m.mgroup, f.name AS forum_name
                                                FROM ibf_posts p
                                                 LEFT JOIN ibf_forums f on (t.forum_id=f.id)
                                                 LEFT JOIN ibf_topics t on (t.tid=p.topic_id and t.approved=1 and t.moved_to IS NULL)
                                                 LEFT JOIN ibf_members m on (p.author_id=m.id)
                                                 LEFT JOIN ibf_member_extra me on (m.id=me.id)
                                                WHERE state!='closed' AND approved=1 AND (moved_to IS NULL or moved_to='') 
                                                GROUP BY t.last_post
                                                   ORDER BY t.last_post DESC
                                                LIMIT 0,5

mySQL error: Unknown column 't.forum_id' in 'on clause'
mySQL error code: 
Date: Monday 25th of February 2013 11:38:25 AM
  #4 (permalink)  
Antiguo 25/02/2013, 07:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Código funciona en PHP4 pero no en PHP5

MySQL te está diciendo que no existe ninguna columna denominada "forum_id" en la tabla "ibf_topics". Si la columna existe realmente, entonces el problema es que estás poniendo las tablas en orden equivocado, porque esa tabla no ha sido leída al momento de invocar la relación.
En SQL el orden de los factores si altera el producto.
Verifica que estés usando correctamente los alias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/02/2013, 07:13
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Código funciona en PHP4 pero no en PHP5

Gracias por la sugerencia gnzsoloyo... pero la columna existe. Como comentaba en mi primer mensaje el código funcionaba perfectamente en PHP4. Tiene que ser una pequeña tontería en la sintaxis que hace que PHP5 no lo lea bien.

1 saludo!
  #6 (permalink)  
Antiguo 25/02/2013, 07:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Código funciona en PHP4 pero no en PHP5

Como te dije, que la columna existe no implica que la sentencia esté bien escrita. El roden de las tablas puede generar errores de ese tipo.
¿Verificaste eso?
Además, la respuesta es de MySQL, no de PHP....
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 25/02/2013, 11:12
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Código funciona en PHP4 pero no en PHP5

Gracias gnzsoloyo... cuando llegue a casa revisaré el orden de las tablas. Pero me sorprende q en PHP4 funcionará a la perfección y sin tocar nada haya dejado de funcionar en PHP5...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Además, la respuesta es de MySQL, no de PHP....
Puse aquí mi consulta pq estoy convencido de q el error está en el código PHP. Si crees q debería estar en MySQL mueve el hilo sin problemas.

1 saludo!
  #8 (permalink)  
Antiguo 25/02/2013, 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: 17 años
Puntos: 2658
Respuesta: Código funciona en PHP4 pero no en PHP5

Cita:
Gracias gnzsoloyo... cuando llegue a casa revisaré el orden de las tablas. Pero me sorprende q en PHP4 funcionará a la perfección y sin tocar nada haya dejado de funcionar en PHP5...
Pues a mí no me sorprende (en realidad me sorprendería que no hubiese que tocar nada), porque cambian librerías, cambian métodos kernel... cambia mucho.
No estamos hablando de sub-versiones, sino de versiones diferentes.
Además, PHP4 no apuntaba a los actuales servidores de MySQL, por lo que perfectamente puede haber problemas de compatibilidad.

Lamentablemente no soy moderador de este foro, así que no puedo mover el hilo. En todo caso lo harán si ven que realmente la cosa va por allá.
__________________
¿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 25/02/2013, 11:53
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Código funciona en PHP4 pero no en PHP5

Tema movido desde PHP A Mysql
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 25/02/2013, 12:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Código funciona en PHP4 pero no en PHP5

Hola Shaktale69:

Coincido con gnzsoloyo en el hecho de que el problema está en el order en que estás haciendo los JOIN's... en tu consulta tienes esto:

Código:
...
FROM ibf_posts p 
LEFT JOIN ibf_forums f 
  ON (t.forum_id=f.id) 
LEFT JOIN ibf_topics t 
  ON (t.tid=p.topic_id AND t.approved=1 AND t.moved_to IS NULL) 
...
Observa que la tabla ibf_topics t la estás declarando hasta el segundo JOIN, sin embargo la estás utilizando en el primero... creo que lo único que tienes que hacer es intercambiar los dos primeros JOINS:

Código:
...
FROM ibf_posts p 
LEFT JOIN ibf_topics t 
  ON (t.tid=p.topic_id AND t.approved=1 AND t.moved_to IS NULL) 
LEFT JOIN ibf_forums f 
  ON (t.forum_id=f.id) 
...
Haz la prueba y nos comentas.

Saludos
Leo.
  #11 (permalink)  
Antiguo 25/02/2013, 12:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Código funciona en PHP4 pero no en PHP5

Precisamente por allí creo que viene la cosa.
De todos modos, creo que se puede hacer una mejora sobre lo que tienes de consulta, porque me parece que estás teniendo cierta redundancia de condiciones que no estoy seguro de si no afectan la performance.
Además de cambiar el orden de las tablas yo te propondría esto:
Código MySQL:
Ver original
  1.     t.*,
  2.     p.*,
  3.     me.avatar_location,
  4.     m.view_avs,
  5.     me.avatar_size,
  6.     m.id member_id,
  7.     m.`name` member_name,
  8.     m.mgroup,
  9.     f.`name` forum_name
  10.     ibf_posts p
  11.     LEFT JOIN ibf_topics t          ON p.topic_id = t.tid
  12.     LEFT JOIN ibf_forums f          ON t.forum_id = f.id
  13.     LEFT JOIN ibf_members m         ON p.author_id = m.id
  14.     LEFT JOIN ibf_member_extra me   ON m.id = me.id
  15.     state!= 'closed'
  16.     AND approved = 1
  17.     AND (moved_to IS NULL OR moved_to = '')
  18.     $qe
  19. GROUP BY t.last_post
  20. ORDER BY t.last_post DESC
  21. LIMIT 0, $limit
Prueba las dos cosas y veamos.
__________________
¿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 25/02/2013, 13:59
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Código funciona en PHP4 pero no en PHP5

Muchas gracias leonardo_josue!!! Efectivamente cambiando el orden de los 2 primeros JOINS funciona de lujo!!!

Gracias por la propuesta gnzsoloyo... ahora pruebo tu mejora y te cuento...
  #13 (permalink)  
Antiguo 25/02/2013, 14:08
Avatar de Shaktale69  
Fecha de Ingreso: febrero-2013
Ubicación: En el bar...
Mensajes: 6
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Código funciona en PHP4 pero no en PHP5

Si señor gnzsoloyo... tu mejora funciona a la perfección!!!

Muchas gracias por todo... sois unos cracks!!!

1 saludo!

P.D.: Marco el tema como solucionado ;)
  #14 (permalink)  
Antiguo 25/02/2013, 14:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Código funciona en PHP4 pero no en PHP5

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: column, php, query, unknown
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 07:58.