Foros del Web » Programando para Internet » PHP »

ha llegado el momento... (mysql > mysqli)

Estas en el tema de ha llegado el momento... (mysql > mysqli) en el foro de PHP en Foros del Web. Ok, ustedes ganan XD he comenzado la transformación de todo el sitio de mysql a mysqli, un sitio que ya lleva 2 años de desarrollo. ...
  #1 (permalink)  
Antiguo 02/07/2013, 07:54
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
ha llegado el momento... (mysql > mysqli)

Ok, ustedes ganan XD

he comenzado la transformación de todo el sitio de mysql a mysqli, un sitio que ya lleva 2 años de desarrollo.

en esos tiempos tuve un montón de dudas sobre mysql y por suerte siempre conseguí respuestas aquí, y el caso puntual por el que preguntaré ahora es uno de esos.

En octubre del 2011 gracias al foro (sobretodo a Abimaelrc) logré saber cuando una variable de conección existía como tal en este tema: http://www.forosdelweb.com/f18/saber...errada-952041/

Usando esta linea

is_resource($con)

pase todo este tiempo validando la conexión de esta forma, ahora resulta que con conexiones mysqli NO FUNCIONA, no lo considera un recurso.

Hay alguna forma saber si la variable de conexión ya está iniciada y no ha sido cerrada?

Gracias como siempre!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #2 (permalink)  
Antiguo 02/07/2013, 08:37
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: ha llegado el momento... (mysql > mysqli)

Prueba por ejemplo:

Código PHP:
Ver original
  1. if ($result instanceof mysqli_result) {
  2.   // true
  3. }
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 02/07/2013, 13:19
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

gracias, pero no entiendo, que es $result?

Reformulando la pregunta, tengo esto:

$cnx=mysqli_connect($cnx_serv,$cnx_user,$cnx_pass, $cnx_sedb);

Una vez creada la conexion $cnx posee un recurso de conexion, al cerrarlo con esto:

mysqli_close($cnx);

$cnx sigue existiendo como una variable, pero ya no es un recurso, por lo que podía saber si estaba conectado o no usando esto:

is_resource($cnx);

Eso ya no sirve más con mysqli, siempre devuelve FALSE.

lo que busco es alguna forma de saber si $cnx tiene un recurso de conexión.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 02/07/2013, 13:43
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: ha llegado el momento... (mysql > mysqli)

esto es hyper bàsico:

http://www.php.net/manual/es/mysqli....onnections.php
  #5 (permalink)  
Antiguo 02/07/2013, 14:58
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Gracias por la ayuda, pero tampoco entiendo que quieres decir...

No necesito saber si la conexión se ha establecido o no, lo que necesito saber es si la conexión está abierta o no.

Estoy seguro que debe haber una forma, si había para mysql debe haber para mysqli un equivalente :o
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 03/07/2013, 08:04
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: ha llegado el momento... (mysql > mysqli)

Lo tienes en la doc http://www.php.net/manual/en/mysqli....truct-examples utiliza la propiedad connect_error o la función mysqli_connect_error para comprobar si hubo error en la conexión.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 03/07/2013, 08:31
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Pues gracias... pero... no logro explicarme bien... no estoy tratando de comprobar si hubo error en la conexión.

Solo quiero saber si la variable de conexion se ha cerrado, otro ejemplo, si tengo esto en un archivo:

Código PHP:
Ver original
  1. $cnx=mysqli_connect($cnx_serv,$cnx_user,$cnx_pass, $cnx_sedb);

y luego de eso quiero saber si la conexion ($cnx) se ha cerrado, si se ha cerrado entonces abrirla otra vez, algo asi

Código PHP:
Ver original
  1. if(!is_open?($cnx)) $cnx=mysqli_connect($cnx_serv,$cnx_user,$cnx_pass, $cnx_sedb);

Esto es por que la página funciona con varios panelescon Ajax, el usuario puede abrir, cerrar, guardar paneles y continuar más tarde, si se abren muchos paneles que requieren conexion intento no abrir la conexión más de una vez de modo de evitar leer el archivo 2 veces y abrir la conexión 2 veces:

Código PHP:
Ver original
  1. include(cnx.php);
  2. ....
  3. ...
  4. ....
  5. include(cnx.php);

para esto necesito preguntar si la conexión ya fue abierta antes antes de abrirla otra vez, antiguamente lo hacía así

Código PHP:
Ver original
  1. include(cnx.php);
  2. ....
  3. ...
  4. ....
  5. if(!is_resource($cnx)) include(cnx.php);

Espero ahora se entienda.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 03/07/2013, 09:02
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: ha llegado el momento... (mysql > mysqli)

No utilizo la extensión pero entiendo que si el objeto existe y no tiene errores de conexión quiere decir que esta(la conexión) esta abierta, se entiende ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 03/07/2013, 09:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ha llegado el momento... (mysql > mysqli)

Pues creo el problema es tu método, la extensión mysqli es muy diferente, porque ya no es un recurso solamente, es un objeto, la forma de ver si esta activo o no sería borrar el objeto con unset después de cerrar y luego comparar.

Pero repito tu forma de trabajar es totalmente incorrecta y haces más lento el script, pero bueno es tu forma de hacerlo, así que la forma de hacer lo que pides es cerrando, y luego con unset para borrar el objeto de la memoria.

Saludos.
  #10 (permalink)  
Antiguo 03/07/2013, 09:12
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Entiendo.

Bueno, omitiendo lo de cerrar la conexión, lo que más me interesa es no abrirla 2 veces, como puedo comprobar si ya esta abierta para no incluir el archivo de nuevo?

O sea esto:

Código PHP:
Ver original
  1. include(cnx.php);
  2. ....
  3. ...
  4. ....
  5. if(!is_resource($cnx)) include(cnx.php);

Habría que usar un isset($cnx)? sinceramente no me gusta mucho la idea, buscaba algo como lo que publicó abimaelrc para mysql:

Cita:
Iniciado por abimaelrc Ver Mensaje
El cerrar una conexión y abrirla gasta muchos recursos. Pero para detectar si ha sido cerrado o no puedes usar get_resource_type. Ejemplo
Código PHP:
Ver original
  1. $connection = mysql_connect('localhost', 'root', '');
  2. if(get_resource_type($connection) == 'mysql link'){
  3.     mysql_close($connection);
  4.     echo 'Se cerro la conexión';
  5. }
  6. if(get_resource_type($connection) == 'mysql link'){
  7.     mysql_close($connection);
  8.     echo 'Se cerro la conexión';
  9. }
Y sería bueno, que primero verificaras si es un recurso con is_resource lo puedes hacer.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 03/07/2013, 10:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ha llegado el momento... (mysql > mysqli)

Por eso mismo, es un error totalmente incluir dos veces el script, y pues una solución cruda puede ser que mantegas un flag así como $cnx, por ejemplo:
Código PHP:
Ver original
  1. / / mysql
  2. $is_connected = true;
  3. $cnx = new mysqli(...);
  4.  
  5. // otroscript
  6. if (!$is_connected) incluide('mysql.php');

Saludos.
  #12 (permalink)  
Antiguo 03/07/2013, 10:42
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

GatorV, no creo que sea correcto que digas que la forma en que lo hago sea totalmente incorrecta sin saber exactamente que estoy haciendo, mi sitio no solo es rapidísimo, animado, fluido y flexible, si no que además guarda el estado actual de sea lo que sea que haga el usuario ya que guarda todos los formularios en segundo plano con ajax, además cada vez que el usuario entra ve la página exactamente igual que como la dejó la última vez.

Entonces, que pasa?

un usuario puede estar en index.php y con ajax llamar a una o más páginas contenidas en capas (al estilo Sistema operativo con ventanas) con los paneles que a el le interesan, entonces la pagina pasa a tener varias subpaginas, cada subpagina con una conexión independiente asincrónica.

index.php pasa a tener las páginas panel1, panel2, panel3, etc. "contenidas"

Al cerrar la página y volver abrirla no necesito cargar la conexion 4 veces por cada panel como al principio, sería un consumo innecesario de recursos, basta con hacerlo solo una vez, pero como las páginas incluidas siguen siendo independientes, tengo que comprobar que no haya una conexión previa antes de abrir una nueva.



Usaré lo que dices de usar una variable, creo que es lo mejor, aunque no me gusta tanto como antes.

Saludos!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #13 (permalink)  
Antiguo 03/07/2013, 10:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ha llegado el momento... (mysql > mysqli)

Independiente del diseño, que sea con AJAX o no, el diseño no es correcto desde un punto de vista de mantenimiento y expansión, te recomiendo leas sobre inyección de dependencias y diseño por contrato y vas a ver que dista mucho a lo que estas haciendo

Saludos.
  #14 (permalink)  
Antiguo 03/07/2013, 11:00
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Entiendo que puedan haber otras formas de hacerlo, quizás mejores, pero eso no significa que sean las únicas, lo que hago funciona, y funciona bien, en muy pocas lineas, el sitio completo solo pesa 34mb (de los cuales 30mb son imagenes), entonces, si funciona bien, y eficientemente y hace más que ningún otro sitio que conozca, entonces, por que no?

Yo creo que está bien cuestionarse si el usuario al que tratamos de ayudar sigue el camino correcto, pero no está bien asegurar que esté mal, si no sabemos que hacen exactamente en vez de preocuparnos de que sea subestandar, podríamos tratar de solucionar el problema, en vez de dar problemas nuevos.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #15 (permalink)  
Antiguo 03/07/2013, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ha llegado el momento... (mysql > mysqli)

El problema es que no es correcto por donde lo veas jeje pero bueno, como dices te funciona, el problema es de arquitectura más que nada, y la solución ya te la di y te explique porque no lo puedes hacer como antes (con is_resource).

Saludos.
  #16 (permalink)  
Antiguo 03/07/2013, 11:14
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: ha llegado el momento... (mysql > mysqli)

Cita:
Iniciado por stramin Ver Mensaje
Entiendo que puedan haber otras formas de hacerlo, quizás mejores, pero eso no significa que sean las únicas, lo que hago funciona, y funciona bien, en muy pocas lineas, el sitio completo solo pesa 34mb (de los cuales 30mb son imagenes), entonces, si funciona bien, y eficientemente y hace más que ningún otro sitio que conozca, entonces, por que no?

Yo creo que está bien cuestionarse si el usuario al que tratamos de ayudar sigue el camino correcto, pero no está bien asegurar que esté mal, si no sabemos que hacen exactamente en vez de preocuparnos de que sea subestandar, podríamos tratar de solucionar el problema, en vez de dar problemas nuevos.
una de las primeras cosas que aprendí en programación es: que funcione no significa que esté bien, puedes tener código espagueti y te funciona, pero no significa que esté bien.

por ejemplo dices que el sitio con imágenes te pesa 30 Mb, prueba a hacer sprites con CSS3 y verás que cargará más rápido el sitio y te pesará menos. te funcionará también, pero mejor y el código quedará más limpio. no solo que funcione, sino también el futuro mantenimiento y reutilización de código.

y ya no digo más, cada cual sabrá lo que hace :D
  #17 (permalink)  
Antiguo 03/07/2013, 11:24
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Gracias por el aporte guardarmicorreo, la verdad no se como funciona eso de los sprites en CSS3, pero las imagenes pesan por que son grandes, son imagenes de fondo, está hecho para funcionar en un LCD (al jefe le gusta trabajar con pantallas grandes), además el sitio tiene skins, así que imagina, cada skin tiene un fondo distinto, por eso pesan tanto las imágenes XD

Creeme, mi código no es spaguetti, si pesa poco es por algo. :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #18 (permalink)  
Antiguo 03/07/2013, 12:31
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: ha llegado el momento... (mysql > mysqli)

ok, ya entendi, no importa cuantas veces incluyas el archivo de conexion,
no uses mas include sino include_once o requir_once para que solo lo incluya una vez,
y no se como llegaron a hablar de sprites css jajaja

y si sos un spaguetty, no lo niegues jajaja
  #19 (permalink)  
Antiguo 03/07/2013, 12:35
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

OMG!

Cita:
include_once puede ser usado en casos donde el mismo fichero podría ser incluido y evaluado más de una vez durante una ejecución particular de un script, así que en este caso, puede ayudar a evitar problemas como la redefinición de funciones, reasignación de valores de variables, etc.
es perfecto! muy buen aporte!

no soy un spaguetti, toma tu punto! XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #20 (permalink)  
Antiguo 03/07/2013, 14:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ha llegado el momento... (mysql > mysqli)

Puedes usar mysql_ping para lo que necesitas: [URL="http://www.php.net/manual/en/mysqli.ping.php"]http://www.php.net/manual/en/mysqli.ping.php[/URL]

Y si tu servidor lo configuras con la directiva mysqli.reconnect php intentara hacer una reconección de forma automática.

Saludos
  #21 (permalink)  
Antiguo 03/07/2013, 15:29
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: ha llegado el momento... (mysql > mysqli)

Eso está perfecto para un sitio como este, lo que si me preocupa es que tome su tiempo en hacer el ping, eso haría que respondiese algo lento... lo tendré en cuenta, gracias!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: momento, mysql
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 15:28.