Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/03/2010, 11:35
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Duda con clase mysql, saber si se ejecuta 2 veces la consulta

Buenas,

Tengo una pequeña duda,

Si tengo esta clase mysql

class-mysql.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. class DataBase {
  4.  
  5.     private $conexion;
  6.     private $resource;
  7.     private $sql;
  8.     public static $queries;
  9.     private static $_singleton;
  10.  
  11.     public static function getInstance($servidor, $user, $password, $db){
  12.         if (is_null (self::$_singleton)) {
  13.             self::$_singleton = new DataBase($servidor, $user, $password, $db);
  14.         }
  15.         return self::$_singleton;
  16.     }
  17.  
  18.     private function __construct($servidor, $user, $password, $db){
  19.         $this->conexion = @mysql_connect($servidor, $user, $password);
  20.         mysql_select_db($db, $this->conexion);
  21.         $this->queries = 0;
  22.         $this->resource = null;
  23.     }
  24.  
  25.     public function execute(){
  26.         if(!($this->resource = mysql_query($this->sql, $this->conexion))){
  27.             return null;
  28.         }
  29.         $this->queries++;
  30.         return $this->resource;
  31.     }
  32.  
  33.     public function alter(){
  34.         if(!($this->resource = mysql_query($this->sql, $this->conexion))){
  35.             return false;
  36.         }
  37.         return true;
  38.     }
  39.  
  40.     public function loadObjectList(){
  41.         if (!($cur = $this->execute())){
  42.             return null;
  43.         }
  44.         $array = array();
  45.         while ($row = @mysql_fetch_object($cur)){
  46.             $array[] = $row;
  47.         }
  48.         return $array;
  49.     }
  50.  
  51.     public function setQuery($sql){
  52.         if(empty($sql)){
  53.             return false;
  54.         }
  55.         $this->sql = $sql;
  56.         return true;
  57.     }
  58.  
  59.     public function freeResults(){
  60.         @mysql_free_result($this->resource);
  61.         return true;
  62.     }
  63.  
  64.     public function loadObject(){
  65.         if ($cur = $this->execute()){
  66.             if ($object = mysql_fetch_object($cur)){
  67.                 @mysql_free_result($cur);
  68.                 return $object;
  69.             }
  70.             else {
  71.                 return null;
  72.             }
  73.         }
  74.         else {
  75.             return false;
  76.         }
  77.     }
  78.    
  79.     //Numero de columnas   
  80.     function num_rows(){
  81.         return @mysql_num_rows($this->execute());
  82.     }
  83.    
  84.     function __destruct(){
  85.         @mysql_free_result($this->resource);
  86.         @mysql_close($this->conexion);
  87.     }
  88. }
  89. ?>

Y lanzo este script de prueba

prueba.php
Código PHP:
Ver original
  1. <?php
  2. include('class-mysql.php');
  3.  
  4. // Hacemos la conexión
  5. $db = DataBase::getInstance('localhost','root','pass','hmgroupcat');
  6.  
  7. // Supongamos que tenemos una tabla de usuarios
  8. // Hacemos la consulta:
  9. $db->setQuery("SELECT ID,post_date,post_content FROM wp_posts");
  10.  
  11. // La ejecutamos y al mismo tiempo obtenemos un arreglo de objetos
  12. // con los campos especificados en la consulta como propiedades.
  13. $datos = $db->loadObjectList();
  14. echo $db->num_rows();
  15.  
  16. echo "<pre>";
  17. print_r($datos);
  18. echo "</pre>";
  19. // Los imprimimos directamente en pantalla...
  20. foreach($datos as $campo){
  21.     echo 'ID: '.$campo->ID;
  22.     echo 'Nombre: '.$campo->post_name;
  23.     echo 'Grupo: '.$campo->post_status;
  24.     echo '<br />';
  25. }
  26.  
  27. ?>

Mi pregunta es si en la linea del
echo $db->num_rows();

¿Se vuelve a lanzar la consulta a la base de datos? de ser así, no es óptimo que la lance dos veces, no?

Se como solucionarlo si hago un count($datos) me dirá cuantas filas me arrojó la consulta SQL, pero si quisiera sacar ese número con la clase mysql sin tener que hacer de nuevo la consulta, ¿habría alguna forma? :S

Muchas gracias de antemano!