Foros del Web » Programando para Internet » PHP »

Problema al cambiar de mysql a mysqli

Estas en el tema de Problema al cambiar de mysql a mysqli en el foro de PHP en Foros del Web. Hola a todos amigos del web. Tengo varias webs creadas hace tiempo con myslq en BD, pero solo una de ellas me ha dejado de ...
  #1 (permalink)  
Antiguo 06/11/2014, 12:15
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Pregunta Problema al cambiar de mysql a mysqli

Hola a todos amigos del web. Tengo varias webs creadas hace tiempo con myslq en BD, pero solo una de ellas me ha dejado de funcionar. He probado a actualizar a mysqli y parece ser ese el error (aunque las otras webs funcionan bien ).

El caso es que he realizado algunos cambios y ahora funciona la web pero no me muestra el resultado de la consulta. Os explico a ver si me podéis echar una mano.

He cambiado esta conexion
Código PHP:
Ver original
  1. <?php
  2. # FileName="Connection_php_mysql.htm"
  3. # Type="MYSQL"
  4. # HTTP="true"
  5. $hostname_serv = "xxx.es";
  6. $database_serv = "xxx_BD";
  7. $username_serv = "xxx";
  8. $password_serv = "xxxxxx";
  9. $serv = mysql_pconnect($hostname_serv, $username_serv, $password_serv) or trigger_error(mysql_error(),E_USER_ERROR);
  10. ?>
por esta nueva
Código PHP:
Ver original
  1. <?php
  2.  function Conectarse() {
  3.         if (!($link = new mysqli(’xxx.es’, ’xxx’, ’xxxxxx’))) {
  4.             echo "Error conectando al servidor de base de datos.";
  5.             exit();
  6.         }
  7.        
  8.         if (!($link->select_db(xxx_BD))) {
  9.             echo "Error seleccionando la base de datos.";
  10.             exit();
  11.         }
  12.         return $link;
  13.     }
  14. ?>

Con este cambio he arreglado la conexión aunque luego no la utilizo. Continúo.
La consulta de la base de datos la he cambiado de esta
Código PHP:
Ver original
  1. <?php
  2. mysql_select_db($database_serv, $serv);
  3. $query_Recordset1 = "SELECT * FROM xxx_BD ORDER BY ORDER BY RAND()";
  4. $Recordset1 = mysql_query($query_Recordset1, $serv) or die(mysql_error());
  5. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  6. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  7. ?>
a la actualización de mysqli siguiente
Código PHP:
Ver original
  1. <?php
  2. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  3. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()");
  4. $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  5. $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
  6. ?>
Con este cambio la web funciona y lo que decía antes, no me hace falta incluir la conexión que he puesto al principio pues está aqui.

Hasta aqui todo bien, lo que ocurre es que en el momento de mostrar el resultado tengo lo siguiente
Código PHP:
Ver original
  1. <?php do { ?>
  2.                 <li><img src="slider/data1/images/<?php echo $row_Recordset1['strImagen']; ?>" title="<?php //título de la foto de bd ?>" id="wows1_0" height="400px" width="400px" /><?php //descripción de la foto de bd ?></li>
  3.                 <?php } while ($row_Recordset1 = mysqli_fetch_assoc($Recordset1)); ?>
La ruta donde esta la imagen es correcta pues si la pongo tal cual en el navegador funciona pero no me lo muestra en la web. De momento lo que he hecho es cambiar la ruta hacia la BD y poner una de las imágenes fijas de momento, quedando asi
Código PHP:
Ver original
  1. <?php do { ?>
  2.                 <li><img src="slider/data1/images/32.jpg" title="<?php //título de la foto de bd ?>" id="wows1_0" height="400px" width="400px" /><?php //descripción de la foto de bd ?></li>
  3.                 <?php } while ($row_Recordset1 = mysqli_fetch_assoc($Recordset1)); ?>

Es decir, lo único que he cambiado es la ruta, pero al hacer la consulta no consigo el resultado.

¿Alguna idea para eso?
Creo que he puesto toda la info pero si necesitáis algo más...pedid.
Gracias por adelantado.
  #2 (permalink)  
Antiguo 06/11/2014, 12:35
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, 4 meses
Puntos: 2658
Respuesta: Problema al cambiar de mysql a mysqli

MYSQLI es una librería de acceso a datos de PHP, no es tema de MySQL, sino de PHP.

OFF TOPIC en MySQL
Movido a 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)
  #3 (permalink)  
Antiguo 06/11/2014, 12:57
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
Iniciado por gnzsoloyo Ver Mensaje
MYSQLI es una librería de acceso a datos de PHP, no es tema de MySQL, sino de PHP.

OFF TOPIC en MySQL
Movido a PHP.
Gracias gnzsoloyo
  #4 (permalink)  
Antiguo 06/11/2014, 21:47
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Problema al cambiar de mysql a mysqli

tengo una situación similar...
en pocas semanas deseo migrar las aplicaciones
Gracias
  #5 (permalink)  
Antiguo 06/11/2014, 21:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
¿Alguna idea para eso?
Con leer código no basta, es imposible determinar una causa a simple vista, adivinar es imposible y ejecutar el código mentalmente no se puede.

Pero si nos ayudas a depurar tu código puede que descubras algo:
Código PHP:
Ver original
  1. // después de extraer el registro
  2. $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  3.  
  4. // intenta examinar su contenido
  5. var_dump($row_Recordset1);

¿Viene el índice que buscas o qué te muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 07/11/2014, 05:26
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
Iniciado por pateketrueke Ver Mensaje
Con leer código no basta, es imposible determinar una causa a simple vista, adivinar es imposible y ejecutar el código mentalmente no se puede.

Pero si nos ayudas a depurar tu código puede que descubras algo:
Código PHP:
Ver original
  1. // después de extraer el registro
  2. $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  3.  
  4. // intenta examinar su contenido
  5. var_dump($row_Recordset1);

¿Viene el índice que buscas o qué te muestra?
Hola patejetrueke, gracias por responder.
No se que más codigo poner porque es largo y en varias páginas, pero pídeme y comparto.
En el resultado poniendo el dump es NULL, no se por qué no me muestra nada.
  #7 (permalink)  
Antiguo 07/11/2014, 08:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema al cambiar de mysql a mysqli

Pues si te muestra NULL será que no estás usando correctamente dichas funciones, por favor consulta el manual para que aprendas a hacerlo.

Y no olvides depurar cada paso hasta que comprendas a totalidad el procedimiento.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 07/11/2014, 08:45
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
Iniciado por pateketrueke Ver Mensaje
Pues si te muestra NULL será que no estás usando correctamente dichas funciones, por favor consulta el manual para que aprendas a hacerlo.

Y no olvides depurar cada paso hasta que comprendas a totalidad el procedimiento.
Sé que no estoy usando correctamente las funciones...por eso estoy en un foro de ayuda. En los manuales no encuentro la solución, comprendo perfectamente el mysql, al querer cambiar las mismas consultas a mysqli es dónde no encuentro respuestas...o mejor dicho, respuestas no del todo válida si eres autodidacta. La ayuda que pido es de personas no de manuales generales.

Si necesitáis más código os lo pongo... y sigo investigando en manuales, una cosa no quita la otra.
Gracias.
  #9 (permalink)  
Antiguo 07/11/2014, 08:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema al cambiar de mysql a mysqli

Claro que este es un foro de ayuda, pero no podemos resolver nada de manera omnipotente.

Debe existir una etapa de análisis y reflexión del problema, del cual un "no sirve" o "no muestra nada" no ayuda a aclarar las cosas.

Es por eso que debes depurar siempre tus propios códigos, nunca debes esperar a ir al foro a que te digan: por favor, aprende a depurar tu código.

¿Por qué?

Porque depurar es clave para observar el comportamiento de lo que has programado, y si no depuras ni habilitas el reporte de errores entonces jamás sabrás que algo anda mal, y peor aún, no tendrás pista alguna que nos ayude a entender tu problema.

Cita:
Si necesitáis más código os lo pongo...
El código sirve de nada si no tienes más información que sólo eso, si no depuras es igual a pretender que adivinemos.

Mejor prueba a depurar así y nos dices:
Código PHP:
Ver original
  1. <?php
  2.  
  3. // mostramos todos los errores
  4. ini_set('display_errors',1);
  5.  
  6. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  7. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()");
  8.  
  9. var_dump($Recordset1);
  10.  
  11. $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  12.  
  13. var_dump($row_Recordset1);
  14.  
  15. $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
  16.  
  17. var_dump($totalRows_Recordset1);
  18. ?>

¿Qué muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 07/11/2014, 08:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al cambiar de mysql a mysqli

Asegúrate de que la conexión se realice correctamente y de que la consulta sea correcta y devuelva resultados.

Código PHP:
Ver original
  1. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  2.  
  3. //Si la conexión falla
  4. if (!$mysqli) exit ('No se pudo conectar');
  5.  
  6. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()") or exit ('No se pudo ejecutar la consulta');
  7.  
  8. //Solo si la consulta devuelve resultados, continúas con el resto
  9. if (mysqli_num_rows($Recordset1)){
  10.     $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  11.     $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
  12.     //Lo demás
  13. }

También te sugiero ejecutar la consulta en tu administrador de BD (quizá sea phpMyAdmin) para asegurarte de que sea correcta.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 07/11/2014, 14:38
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
Iniciado por Alexis88 Ver Mensaje
Asegúrate de que la conexión se realice correctamente y de que la consulta sea correcta y devuelva resultados.

Código PHP:
Ver original
  1. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  2.  
  3. //Si la conexión falla
  4. if (!$mysqli) exit ('No se pudo conectar');
  5.  
  6. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()") or exit ('No se pudo ejecutar la consulta');
  7.  
  8. //Solo si la consulta devuelve resultados, continúas con el resto
  9. if (mysqli_num_rows($Recordset1)){
  10.     $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  11.     $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
  12.     //Lo demás
  13. }

También te sugiero ejecutar la consulta en tu administrador de BD (quizá sea phpMyAdmin) para asegurarte de que sea correcta.

Saludos
Gracias alexis.
He probado la consulta en phpMyadmin directamente y me devuelve los resultados correctamente. El problema es que no puedo conectar.
Te copio las dos conexiones con las que trabajo a ver si puedes decirme algo.... la verdad es que le he dado un monton de vueltas pero no logro conectar. Incluso he añadido la IP de mi pc a la lista de host permitidos y nada.
Esta es la conexion que vengo usando normalmente con mysql:
Código PHP:
Ver original
  1. <?php
  2. # FileName="Connection_php_mysql.htm"
  3. # Type="MYSQL"
  4. # HTTP="true"
  5. $hostname_serv = "xxx.es";
  6. $database_serv = "xxx_BD";
  7. $username_serv = "xxx";
  8. $password_serv = "xxxxxx";
  9. $serv = mysql_pconnect($hostname_serv, $username_serv, $password_serv) or trigger_error(mysql_error(),E_USER_ERROR);
  10. ?>
Al darme errores la web cambie a mysqli pero trato de encontrar el error y no lo veo, esta es la conexion:
Código PHP:
Ver original
  1. <?php
  2.  function Conectarse() {
  3.         if (!($link = new mysqli(’xxx.es’, ’xxx’, ’xxxxxx’))) {
  4.             echo "Error conectando al servidor de base de datos.";
  5.             exit();
  6.         }
  7.        
  8.         if (!($link->select_db(xxx_BD))) {
  9.             echo "Error seleccionando la base de datos.";
  10.             exit();
  11.         }
  12.         return $link;
  13.     }
  14. ?>
En la consulta en vez de hacer un include a la conexion tengo lo siguiente:
Código PHP:
Ver original
  1. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  2. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()");
  3. $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  4. $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
como no me tira he probado con tu opcion, la siguiente:
Código PHP:
Ver original
  1. $mysqli = mysqli_connect("xxx.es", "xxx", "xxxxxx", "xxx_BD");
  2.  
  3. //Si la conexión falla
  4. if (!$mysqli) exit ('No se pudo conectar');
  5.  
  6. $Recordset1 = mysqli_query($mysqli, "SELECT * FROM xxx_BD ORDER BY RAND()") or exit ('No se pudo ejecutar la consulta');
  7.  
  8. //Solo si la consulta devuelve resultados, continúas con el resto
  9. if (mysqli_num_rows($Recordset1)){
  10.     $row_Recordset1 = mysqli_fetch_assoc($Recordset1);
  11.     $totalRows_Recordset1 = mysqli_num_rows($Recordset1);
  12.     //Lo demás
  13. }
y la respuesta es NO SE PUDO CONECTAR. Con lo que si me hace bien la consulta en php myadmin y el problema es que no puedo conectar....el problema esta al conectar...pero por mas vueltas que le doy no logro ver la solucion POR MÁS MANUALES QUE CONSULTE SINCERAMENTE.
  #12 (permalink)  
Antiguo 07/11/2014, 14:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
y la respuesta es NO SE PUDO CONECTAR. Con lo que si me hace bien la consulta en php myadmin y el problema es que no puedo conectar....el problema esta al conectar...pero por mas vueltas que le doy no logro ver la solucion POR MÁS MANUALES QUE CONSULTE SINCERAMENTE.
La respuesta no está en los manuales, únicamente te indican cómo debes hacer y usar las cosas.

A ver, si te sale "no se pudo conectar" ¿cómo podríamos adivinar la causa?

Para eso conviene leer el manual, hay una función que te permite conocer el último error ocurrido.

Si en lugar de "no se pudo conectar" imprimes el verdadero error ¿no consideras que es más útil que un "no se pudo conectar"?

Código PHP:
Ver original
  1. if (!$mysqli) exit ('No se pudo conectar; causa: ' . mysqli_connect_error());

Y eso sí viene explicado en el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 07/11/2014, 14:51
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Problema al cambiar de mysql a mysqli

Cita:
Iniciado por pateketrueke Ver Mensaje
La respuesta no está en los manuales, únicamente te indican cómo debes hacer y usar las cosas.

A ver, si te sale "no se pudo conectar" ¿cómo podríamos adivinar la causa?

Para eso conviene leer el manual, hay una función que te permite conocer el último error ocurrido.

Si en lugar de "no se pudo conectar" imprimes el verdadero error ¿no consideras que es más útil que un "no se pudo conectar"?

Código PHP:
Ver original
  1. if (!$mysqli) exit ('No se pudo conectar; causa: ' . mysqli_connect_error());

Y eso sí viene explicado en el manual.
Lo se, ¿por qué tanta hostilidad en tus mensajes? No solo a mí, pero bueno, será que eres así. En fin la respuesta es

No se pudo conectar; causa: Host '37.187.73.XX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

Esta tarde he llamado al servidor y he comentado este error pero me han confirmado que no está bloqueado, que está bien, activo y no se. Doy tantas vueltas y preguntas porque finalmente no creo que el error esté tanto en la escritura pero..... de verdad que intento encontrar la solución y no la veo.
  #14 (permalink)  
Antiguo 07/11/2014, 16:04
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al cambiar de mysql a mysqli

Se me olvidó colocar el mysqli_connect_error().

Revisa este enlace y contacta a tu proveedor.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: mysql, mysql+consulta, mysqli
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 13:25.