• Domingo 22 de Diciembre de 2024, 23:17

Autor Tema:  Clase Query Conexión  (Leído 2974 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Clase Query Conexión
« en: Miércoles 12 de Agosto de 2009, 20:42 »
0
Les dejo esta clase que hicé para imprimir datos en tablas sin tener que estar haciendo redundancia.
Código: PHP
  1. <?php
  2. //Desarrollada por RadicalEd
  3.  
  4. class SQL
  5. {
  6. //Constructor
  7. function SQL($host='localhost', $db='ancheteria', $user='usdist', $password='clio1214')
  8. {
  9.   $this->database = mysql_connect($host, $user, $password) or die("No se pudo conectar con el servidor".mysql_error());
  10.   @mysql_select_db($db) or die( "No se pudo conectar a la db: " . mysql_error());
  11. }
  12.  
  13. //Esta función mostrará datos de una consulta simple
  14. public function tabla($query, $camposTabla)
  15. {
  16.   $tabla = '<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>';
  17.  
  18.   //Hay dos formas de recorrer el array, por for y por foreach
  19.   //acá mostraré ambas
  20.   for ($x=0; $x<count($camposTabla); $x++)
  21.   {
  22.     $tabla .= '<td align="center"><strong>'.$camposTabla[$x].'</strong></td>';
  23.   }
  24.  
  25.   $tabla .= '</tr>';
  26.   $result = mysql_query($query) or die(mysql_error());
  27.   while($row=mysql_fetch_array($result))
  28.   {
  29.     $tabla .= '<tr>';
  30.  
  31.     //Recorriendo el array con foreach
  32.     foreach($camposTabla as $campo)
  33.     {
  34.       $tabla .= '<td>'.$row[$campo].'</td>';
  35.     }
  36.     $tabla .= '</tr>';
  37.   }
  38.  
  39.   $tabla .= '</tbody></table>';
  40.  
  41.   return $tabla;
  42. }
  43.  
  44. //Este metodo mostrará datos de una consulta de varias tablas
  45. public function tablaCompuesta($query, $camposTabla, $camposDatos)
  46. {
  47.   $tabla = '<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>';
  48.   for ($x=0; $x<count($camposTabla); $x++)
  49.   {
  50.     $tabla .= '<td align="center"><strong>'.$camposTabla[$x].'</strong></td>';
  51.   }
  52.  
  53.   $tabla .= '</tr>';
  54.   $result = mysql_query($query) or die(mysql_error());
  55.   $numrows = mysql_num_rows($result);
  56.   $n = 0;
  57.   while($n<$numrows)
  58.   {
  59.     $tabla .= '<tr>';
  60.     foreach($camposDatos as $campo)
  61.     {
  62.       $tabla .= '<td>'.mysql_result($result,$n,$campo).'</td>';
  63.     }
  64.     $tabla .= '</tr>';
  65.  
  66.     $n++;
  67.   }
  68.  
  69.   $tabla .= '</tbody></table>';
  70.  
  71.   return $tabla;
  72.  
  73. }
  74. }
  75.  
  76. //EJEMPLOS DE UTILIZACION
  77.  
  78. //Arrays de los datos a mostrar
  79. $arrayTabla = array('TIPO', 'NUMERO', 'RUTERO');
  80. $arrayDatos = array('TIPO', 'NRO', 'RUTE');
  81.  
  82. //Consulta compuesta de varias tablas
  83. $query = 'SELECT con.tipo_dcto AS '.$arrayDatos[0].', con.nro_dcto AS '.$arrayDatos[1].', con.fk_rutero AS '.$arrayDatos[2].'
  84.  
  85. FROM tbsdpel_rutero AS rut, tbsdpel_content AS con
  86.  
  87. WHERE con.nro_dcto LIKE "19329" AND con.tipo_dcto LIKE "RO" AND con.fk_rutero=rut.id_rutero';
  88. $datos = new SQL($host='localhost', $db='paginafiles', $user='usdist', $password='clio1214');
  89. $tabla = $datos->tablaCompuesta($query, $arrayTabla, $arrayDatos);
  90. echo $tabla;
  91.  
  92. $nuevo = array('id', 'codigo', 'nombre');
  93. $datos = new SQL();
  94. $tabla = $datos->tabla('SELECT * FROM tbancheteria_proveedores', $nuevo);
  95. echo $tabla;
  96.  
  97. ?>
  98.  
El pasado son solo recuerdos, el futuro son solo sueños

grandzam

  • Miembro MUY activo
  • ***
  • Mensajes: 118
    • Ver Perfil
Re: Clase Query Conexión
« Respuesta #1 en: Jueves 13 de Agosto de 2009, 08:45 »
0
Hola, he visto tu clase, y pues solo dos cosas:

1.- No mezcles PHP con HTML  :blink: . Busca sobre Smarty :)
2.- La clase esta mezclada con cosas de todo. Por ejemplo, una clase para crear conexiones (podrías usar Singleton), otra clase que se encargue del HTML, otra de construir consultas... etcétera. De esa manera haces tus clases más reutilizables.

Espero te agraden mis recomendaciones.  :beer:

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Clase Query Conexión
« Respuesta #2 en: Jueves 13 de Agosto de 2009, 16:10 »
0
He visto smarty, no es por nada pero me parece una #$%&/(" no me ha gustado trabajar con él en CRM de Sugar, del resto pues me tocaría ver como es, además es una clase sencilla para proyectos sencillos nada más.

Gracias por tú apore.
El pasado son solo recuerdos, el futuro son solo sueños

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Clase Query Conexión
« Respuesta #3 en: Jueves 13 de Agosto de 2009, 23:05 »
0
Bien si revuelve tu problema Edo, gracias por el aporte.

Lo de evitar mezclar PHP con HTML, no lo veo tan serio. probablemente se referia a mezclar una capa de presentacion con datos del modelo, es decir aceso de base de datos con HTML.

Porque no estoy de acuerdo con respecto a evitar mezclar PHP con HTML? Porque para mi forma de trabajar utilizando un patron MVC donde las plantillas que uso no requieren un framework de MAS para hacer ese trabajo, si desde PHP lo puedo hacer sin agregar mas overhead a la aplicacion, quedando aun lejible.

Los shortags se los activo al vuelo

Código: Text
  1. <? if ($prd != NULL) { ?>
  2. <strong>Producción</strong>
  3. <div>
  4.     <table>
  5.         <thead>
  6.             <tr>
  7.                 <th>Cantidad</th>
  8.                 <th>Descripción</th>
  9.                 <th>Precio total ivi**</th>
  10.                 <th>Moneda</th>
  11.             </tr>
  12.         </thead>
  13.         <tbody>
  14.         <?foreach ($prd as $i):?>
  15.             <tr>
  16.                 <td><?=number_format($i['amount'], 2)?></td>
  17.                 <td><?=$i['show_oq']?></td>
  18.                 <td><?=number_format($i['price'], 2)?></td>
  19.                 <td><?=$i['money']?></td>
  20.             </tr>
  21.         </tbody>
  22.     </table>
  23. </div>
  24. <? } ?>
  25.  

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Clase Query Conexión
« Respuesta #4 en: Viernes 14 de Agosto de 2009, 16:30 »
0
Bueno, PHP embebido en HTML es una mala práctica cuando le pones la lógica del negocio, pero es perfecto cuando utilizas el MVC (Modelo Vista - Controlador), sobre todo cuando trabajas con diseñadores gráficos que no tienen idea de PHP, tal y como dice shakka. De hecho, symfony lo propone así.

Con respecto a la clase que publicó Edo, se puede mejorar si lo haces con PDO, para que funcione con cualquier motor de base de datos, y te ahorras la fachada. Apenas tenga tiempo, pongo el script de Edo funcionando con PDO, si me das permiso, claro :P
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Clase Query Conexión
« Respuesta #5 en: Viernes 14 de Agosto de 2009, 16:33 »
0
Claro, por ahí derecho aprendo.
El pasado son solo recuerdos, el futuro son solo sueños

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Clase Query Conexión
« Respuesta #6 en: Domingo 16 de Agosto de 2009, 02:42 »
0
Bueno, después de una noche de viernes viendo manga  :nosweat: , y toda una tarde de sábado jugando con el DS &lt;_&lt; , aquí les dejo el script con PDO:

Código: PHP
  1. <?php
  2. // Desarrollada por RadicalEd
  3. // Modificado por shadow_rev
  4. class SQL
  5. {
  6.     //Constructor
  7.     // function SQL($host='localhost', $db='ancheteria', $user='usdist', $password='clio1214')
  8.     var $database;
  9.     function SQL($string_conexion)
  10.     {
  11.         // Así se conecta con una base de datos MySQL
  12.         //$this->database = mysql_connect($host, $user, $password) or die("No se pudo conectar con el servidor".mysql_error());
  13.         //@mysql_select_db($db) or die( "No se pudo conectar a la db: " . mysql_error());
  14.        
  15.         // Con PDO (PHP >= 5.2), se conecta de esta forma
  16.         $this->database = new PDO($string_conexion);
  17.     }
  18.  
  19.     //Este metodo mostrará datos de una consulta de varias tablas
  20.     public function tablaCompuesta($query, $camposTabla, $camposDatos)
  21.     {
  22.         $tabla = '';
  23.         try
  24.         {
  25.             $tabla = '<table border="1" cellpadding="1" cellspacing="1"><tbody><tr>';
  26.             for ($x=0; $x<count($camposTabla); $x++)
  27.             {
  28.                 $tabla .= '<td align="center"><strong>'.$camposTabla[$x].'</strong></td>';
  29.             }
  30.  
  31.             $tabla .= '</tr>';
  32.             //$result = mysql_query($query) or die(mysql_error());
  33.  
  34.             // Prepara la consulta
  35.             $result = $this->database->prepare($query);
  36.  
  37.             // Ejecuta la consulta
  38.             $result->execute();
  39.  
  40.             // Obtiene TODO el conjunto de datos
  41.             $result_array = $result->fetchAll();
  42.  
  43.             $n = 0;
  44.             foreach($result_array as $row)
  45.             {
  46.                 $tabla .= '<tr>';
  47.                 foreach($camposDatos as $campo)
  48.                 {
  49.                     //$tabla .= '<td>'.mysql_result($result,$n,$campo).'</td>';
  50.                     $tabla .= '<td>' . $row[$campo] . '</td>';
  51.                 }
  52.                 $tabla .= '</tr>';
  53.  
  54.                 $n++;
  55.             }
  56.             $tabla .= '</tbody></table>';
  57.  
  58.         }
  59.         catch(PDOException $pdoe)
  60.         {
  61.             echo "Error en la consulta: " . $pdoe->getMessage() . "<br />";
  62.         }
  63.         return $tabla;
  64.     }
  65. }
  66.  
  67. // Ejemplo de uso 
  68. //Arrays de los datos a mostrar
  69. $arrayTabla = array('NOMBRE', 'TELEFONO FIJO', 'TELEFONO MOVIL');
  70. $arrayDatos = array('nombre', 'telefono_fijo', 'telefono_movil');
  71.  
  72. //Consulta compuesta de varias tablas
  73. $query = 'SELECT name AS ' . $arrayDatos[0] . ', telefono AS ' . $arrayDatos[1] . ', celular AS ' . $arrayDatos[2] . ' FROM telefonos, usuarios WHERE usuarios.id=telefonos.id_usuario';
  74. $datos = new SQL('sqlite:/home/raulerne/public_html/test/database.sq3');
  75. $tabla = $datos->tablaCompuesta($query, $arrayTabla, $arrayDatos);
  76.  
  77. echo $tabla;
  78.  
  79. ?>
  80.  
  81.  
Yeap, hace falta una función, pero no la vi necesaria. De hecho, ¿Por qué lo hiciste así Edo? :unsure:

PD: Si tienen dudas sobre el string de conexión, consulten la documentación de los drivers de PDO. Allí aparece el formato que debe tener el string para conectarse con diferentes bases de datos.
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas