Autor Tema: [CLASE] Hacer consultas con mysqli  (Leído 7194 veces)

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
[CLASE] Hacer consultas con mysqli
« en: 28 de Septiembre de 2010, 23:47:28 pm »
Esta es una clase que hize para hacer multiples consultas con mysqli, esto me actualmente me está ahorrando mucho código en un proyecto que estoy llevando acabo, la clase se basa en una sola función ya que es para uso rapido y ahorrar espacio. El modo de uso es el siguiente:
Citar
<?PHP
require_once &#39;Nombre que le pusieron a la clase&#39;;
$contenido queryManager::makeQuery("SELECT nick FROM msg ORDER BY id ASC LIMIT 2;SELECT time FROM msg ORDER BY id ASC LIMIT 2"); /* Esto les devolvera un array con otros array con los valores obtenidos, ejemplo, si queremos sacar los datos del primer select tendremos que hacer un foreach de $contenido[&#39;nick&#39;], si en la consulta el campo se llama ejemplo algo, sería hacer un foreach a $contenido[&#39;algo&#39;] para sacar los datos obtenidos.*/
foreach($contenido[&#39;nick&#39;] as $values){
echo $values; }
?>


Citar
<?PHP
/*
_|_|_|  _|_|_|_|    _|_|      _|_|_|  _|    _|  _|      _|  
  _|    _|        _|    _|  _|        _|    _|    _|  _|    
  _|    _|_|_|    _|    _|  _|        _|    _|      _|      
  _|    _|        _|    _|  _|        _|    _|    _|  _|    
_|_|_|  _|          _|_|      _|_|_|    _|_|    _|      _|  
*/
class queryManager {
    private static 
$host = &#39;host&#39;;
    
private static $user = &#39;usuario&#39;;
    
private static $pass = &#39;pass&#39;;
    
private static $db = &#39;basededatos&#39;;
    
private $query;
    public static function 
makeQuery($query) {
        
$mysqli = new mysqli(self::$hostself::$userself::$passself::$db);
        if (
$mysqli->connect_error) die(&#39;Problemas al establecer la conexion.<br/>CODIGO DE ERROR:&#39; . $mysqli->connect_errno . &#39;<br/>Detalles:&#39; . $mysqli->connect_error);
        
$self->query $query;
        if (
$mysqli->multi_query($self->query)) {
            do {
                if (
$focux $mysqli->store_result()) {
                    while (
$mrfocux $focux->fetch_assoc()) {
                        foreach(
$mrfocux as $key => $value) {
                            
$datos[$key][] = $value;
                        }
                    }
                    
$focux->close();
                }
            }
            while (
$mysqli->next_result());
            return 
$datos;
            
$mysqli->close();
        }
    }
}
?>
« Última modificación: 28 de Septiembre de 2010, 23:51:33 pm por Focux »
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Comunidad PHPeros

[CLASE] Hacer consultas con mysqli
« en: 28 de Septiembre de 2010, 23:47:28 pm »

Desconectado robertoiui

  • PHPer@
  • **
  • Mensajes: 77
  • Karma: 0
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #1 en: 16 de Octubre de 2010, 11:48:30 am »
te has equivocado? no será mysql?

Desconectado SergioPina

  • PHPer@
  • **
  • Mensajes: 59
  • Karma: 1
  • Sexo: Masculino
  • ¡Contando arrays!
    • Ver Perfil
    • Página personal
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #2 en: 16 de Octubre de 2010, 18:47:16 pm »
te has equivocado? no será mysql?
Nop, esa es MySQLi

Me parece una excelente programación, impecable.
¿Por qué mostramos códigos abiertos en nuestra firma?, Creemos que por hacer un par de cosas en ella nos tomarán más en cuenta, ¡PHPeros sin firmas en PHP!

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #3 en: 16 de Octubre de 2010, 19:52:40 pm »
De POO solo tiene la sintaxis, porque a todos los efectos es una única función.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #4 en: 16 de Octubre de 2010, 22:26:31 pm »
TLX creo que tienes un mal concepto de lo que es POO, no creo que eso sea tener más de una función, tambien deberías leer lo que puse allá arriba ''la clase se basa en una sola función ya que es para uso rapido y ahorrar espacio.'' y tampoco querría más funciones ya que esa función hace todo, sacar todos los datos y tambien mediante la consulta podrías saber la cantidad de filas si es lo que quieres saber.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #5 en: 17 de Octubre de 2010, 02:21:15 am »
No, no, créeme, no tengo un mal concepto de POO.

Si lees la teoría de la programación orientada a objetos, comprenderás que tu código no tiene mucho sentido hacerlo en POO. Principalmente porque hacer una clase de una clase no tiene sentido. (Haces una clase de mysqli, que es una clase)

Además me has entendido mal: Cuando he dicho función quería decir función (es decir, programación estructurada, una función de toda la vida: function Query() ) y no un método de clase. Pueden existir clases que tengan solo un método, y incluso clases que no tengan ninguno, pero este caso no es uno.

¿ Para que quieres una clase que solo tiene un método, y además su única función es esa ?
Quiero decir, ¿ cual es la ventaja de usar eso y no esto ?

<?PHP
require_once &#39;funciones.php&#39;;
$contenido makeQuery("SELECT nick FROM msg ORDER BY id ASC LIMIT 2;SELECT time FROM msg ORDER BY id ASC LIMIT 2"); /
foreach(
$contenido[&#39;nick&#39;] as $values){
echo $values; }
?>


Debo entender que tu clase es una clase estática, esta bien, algo es algo, por lo menos no la has instanciado (eso ya sería demasiado), pero sigue sin tener mucho sentido (por lo menos para mi punto de vista, lo que yo digo no es la opinión de todos, supongo)

Mira, buscando un poco, he encontrado un parrafo de la wikipedia que ha sabido expresar justamente lo que yo no he podido porque no encontraba las palabras:
http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
Citar
En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.
¿Ves la diferencia? Tu código es una clase, si, pero se asemeja mucho mas al modelo de programación estructurada (funcion procesa dato, en este caso query) que a POO (define objeto y luego hacen métodos).

No se si consigo explicarme.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #6 en: 18 de Octubre de 2010, 22:10:08 pm »
Resalto esta parte del parrafo que buscaste ''funciones que procesan datos'', lo que hace mi clase es procesar la consulta y luego enviar una clase. Tambien me llamo mucho la atencion esto ''Haces una clase de mysqli, que es una clase'', obvio, me imagino que si crean la clase es para darle uso y te digo algo, yo podria tambien haber extendido la clase pero se me hizo mas facil hacerlo asi.


Citar
<?PHP
require_once 'funciones.php';
$contenido = makeQuery("SELECT nick FROM msg ORDER BY id ASC LIMIT 2;SELECT time FROM msg ORDER BY id ASC LIMIT 2"); /
foreach($contenido['nick'] as $values){
echo $values; }
?>
Con respecto a eso, la programacion orientada a objetos busca facilitar el trabajo al programador y hacer los codigos reutilizables, entonces si lo puse asi es porque yo lo puedo usar en cualquier momento y agregarles mas funciones, hasta el mismo que lo use si sabe de programacion lo puede hacer.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #7 en: 18 de Octubre de 2010, 22:57:14 pm »
lo que hace mi clase es procesar la consulta y luego enviar una clase.

Eso es, procesa un dato (una consulta) y devuelve un array. Vamos, que procesa un dato y lo devuelve ya procesado.

Tambien me llamo mucho la atencion esto ''Haces una clase de mysqli, que es una clase'', obvio, me imagino que si crean la clase es para darle uso y te digo algo, yo podria tambien haber extendido la clase pero se me hizo mas facil hacerlo asi.

Si, estamos de acuerdo, MySQLi está hecho para que se use, y puedes usarlo de esta forma si quieres. Lo que intento decirte es que usarlo de esta forma en una clase no es ni efectivo, ni eficiente, ni útil. Es lo mismo que usarlo en una función. Lo que quiero decir es que tu definición de clase no tiene sentido.

Con respecto a eso, la programacion orientada a objetos busca facilitar el trabajo al programador y hacer los codigos reutilizables, entonces si lo puse asi es porque yo lo puedo usar en cualquier momento y agregarles mas funciones, hasta el mismo que lo use si sabe de programacion lo puede hacer.

En primer lugar, tu clase tiene poco de reutilizable (que por cierto como veo que sabes, es una base de la POO). Este fragmento:
    private static $host = 'host';
    private static $user = 'usuario';
    private static $pass = 'pass';
    private static $db = 'basededatos';
Es básicamente lo que lo convierte en no-reutilizable. En este caso la diferencia no es mucha porque solo hay que modificar 4 lineas. Pero si alguien quiere utilizarlo ya tiene que modificar la clase a mano. Lo correcto habría sido colocar esto en un constructor, y mediante el constructor asignar los valores.

Pero bueno, dejando este "matiz" de lado... ¿serias capaz de decirme cual es la ventaja de usar ese código y no este que pongo a continuación? Puedes razonarlo como quieras: reutilización, modificación, lo que quieras.


function makeQuery($query) {
        
$mysqli = new mysqli("TU HOST""TU USUARIO""TU PASS""TU DB");
        if (
$mysqli->connect_error) die(&#39;Problemas al establecer la conexion.<br/>CODIGO DE ERROR:&#39; . $mysqli->connect_errno . &#39;<br/>Detalles:&#39; . $mysqli->connect_error);
        
if ($mysqli->multi_query($query)) {
            do {
                if (
$focux $mysqli->store_result()) {
                    while (
$mrfocux $focux->fetch_assoc()) {
                        foreach(
$mrfocux as $key => $value) {
                            
$datos[$key][] = $value;
                        }
                    }
                    
$focux->close();
                }
            }
            while (
$mysqli->next_result());
            return 
$datos;
            
$mysqli->close();
        }


Créeme, son exactamente lo mismo. Usar una clase para esto no da ninguna ventaja.
¿Se puede usar? Claro que si, estas en tu derecho, puedes hacer lo que quieras, pero no te aporta nada útil, simplemente estas cambiando la sintaxis de función a clase, pero el modelo funcional (espero que entiendas lo que quiero decir con eso) es el mismo.

Me gustaría aclarar que mis mensajes son críticas totalmente con ánimo constructivo, y no de faltar, y si critico tanto el código es porque creo que se puede mejorar mucho, y pienso que puedo ayudarte al menos a comprender como funciona POO y como debería ser el código (o en este caso, como no debería ser) pero mi fin es únicamente ayudarte.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #8 en: 18 de Octubre de 2010, 23:10:28 pm »
Lo primero es que no se necesitan mas variables para agregar mas clases, con esas que ya hay puedes seguir utilizando el mysqli ya instanceado. ''¿serias capaz de decirme cual es la ventaja de usar ese código y no este que pongo a continuación?'', re***** lo anterior ''Con respecto a eso, la programacion orientada a objetos busca facilitar el trabajo al programador y hacer los codigos reutilizables, entonces si lo puse asi es porque yo lo puedo usar en cualquier momento y agregarles mas funciones, hasta el mismo que lo use si sabe de programacion lo puede hacer.''
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #9 en: 18 de Octubre de 2010, 23:21:56 pm »
Lo primero es que no se necesitan mas variables para agregar mas clases, con esas que ya hay puedes seguir utilizando el mysqli ya instanceado. ''¿serias capaz de decirme cual es la ventaja de usar ese código y no este que pongo a continuación?'', re***** lo anterior ''Con respecto a eso, la programacion orientada a objetos busca facilitar el trabajo al programador y hacer los codigos reutilizables, entonces si lo puse asi es porque yo lo puedo usar en cualquier momento y agregarles mas funciones, hasta el mismo que lo use si sabe de programacion lo puede hacer.''

Bueno, no se que quieres decir con eso de "no se necesitan mas variables para agregar mas clases", tendrás que explicarte un poco mejor. Yo no he agregado ninguna variable, si no que mas bien lo que proponía era usar LAS MISMAS VARIABLES, pero darles un mejor uso usando un constructor, con lo que ya consigues que sea un poco mas reutilizable.

Respecto a lo segundo: si, esa es la una propiedad de la POO, y eso se aplica a un código orientado a objetos, pero yo sigo diciendo, que tu código del primer post tiene poco de POO (llámame pesado, pero es lo que hay). Lo que te pido es que me muestres específicamente cual es la diferencia, y que hace mejor un código respecto al otro. Ejemplo: Mi clase... blablabla, en cambio tu función: blablabla. El único fin de pedirte esto, es que veas que no hay ninguna diferencia de uso entre las dos, sino simplemente de sintaxis.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #10 en: 19 de Octubre de 2010, 00:29:04 am »
Mejor vamos a dejarlo aqui porque si seguimos sera una discusion sin fin, que siga el tema.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #11 en: 19 de Octubre de 2010, 00:31:27 am »
No entiendo a la gente que no quiere discutir, para mi la discusión es la base del conocimiento, pero bueno, que no lo entienda no significa que no lo respete, si quieres dejarlo ahí pues ahí se deja.

Un saludo
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado FeDe

  • PHPero Avanzado
  • ****
  • Mensajes: 448
  • Karma: 35
  • Sexo: Masculino
  • BaDyDj -> ¡Mi Stylo, Mi ViDa!
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #12 en: 06 de Enero de 2011, 20:22:22 pm »
Buenas,

Me voy a meter a la discusión para intentar explicar lo que dice TLX, que desde mi punto de vista, tiene razón.

Focux lo que has hecho es generar una clase a la que has llamado "queryManager" que ejecuta la conexión de mysqli y resuelve un query que quieres procesar.

TLX te intenta decir esto:
Que eso no es POO. ¿Por qué? Porque estás procesando datos en una clase como si fuera una función...

No tiene sentido & mucho menos lógica hacer la resolución de datos de una clase a través de otra clase... porque lo que haces es llamar a una clase, que llama a otra que es la que realiza la función...

Un ejemplo exágerado sería:


function llamar($variable) {
	
exec($variable);
}
function 
ejecutar($codigo) {
	
llamar($codigo);
}

print 
ejecutar("free -m");


Sería algo similar referido a una función, a ver si así lo entiendes jejeje.


Llamas a una función con otra función que procesa esa función...
Mi pregunta... ¿Por qué no hacerlo directamente?
¿Cómo? Evitando procesar otra clase más, en este caso "queryManager" y usar directamente mysqli.

No es facilidad al programador, porque así haces el código más lioso y una latencia de proceso mayor.

Espero que me haya explicado bien !

& digo lo mismo que TLX, todo esto es constructivo para nada destructivo & mucho menos para joder.

Un abraaaaaaazote :D
Sin Firma me haces una? :P

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #13 en: 06 de Enero de 2011, 22:48:46 pm »
Sé nota que no sabes lo que estás hablando, porque POO no depende de si tienen una sóla función, si quieres te puedo buscar mas de 10 clases muy útiles que dependen de más funciones, en cualquier momento me avisas, además hace poco necesitaba algo más para el proyecto & re hize la clase, luego la posteo.
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[CLASE] Hacer consultas con mysqli
« Respuesta #14 en: 06 de Enero de 2011, 23:08:22 pm »
Sé nota que no sabes lo que estás hablando, porque POO no depende de si tienen una sóla función, si quieres te puedo buscar mas de 10 clases muy útiles que dependen de más funciones, en cualquier momento me avisas, además hace poco necesitaba algo más para el proyecto & re hize la clase, luego la posteo.

Focux.. Fede solo esta dandote un ejemplo... Lo que quiere decir es que hacer una clase de una clase es como hacer una función de una función!
No tiene sentido! Es reiterativo, es como si yo ahora programo una función que se llama "eco" así:

function eco($var) {
    echo 
$var;
}


Por darte un ejemplo.. ¿Para que voy a usar eco() si puedo usar echo() directamente y hacen exactamente lo mismo? Para nada.
Y no solo eso, sino que ya te he dicho que tu clase puede escribirse como una función, y por lo tanto no tiene nada de clase.
Una clase, que se ejecuta como una función, no tiene sentido. Ya te hize tu transformación clase-función y como ves es exactamente lo mismo.

Y por cierto, ahora que esta muy de moda eso de decir "No, esque programo en POO porque así el código es reutilizable". El código reutilizable no es nada nuevo, lleva existiendo desde hace mucho tiempo. Las funciones, de hecho, en su mayoria, son código reutilizable.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es