Source for file REPMySQLItems.class.php

Documentation is available at REPMySQLItems.class.php

  1. <?php
  2. /**
  3.  * Módosítva: 2010.03.06.
  4.  *
  5.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  6.  * @copyright Copyright (C) 2010, Takács Ákos
  7.  * @version 1.0
  8.  * @package REPagination
  9.  */
  10.  
  11. /**
  12.  * @ignore
  13.  */
  14. require_once dirname(__FILE__).'/../../REPClasses.class.php';
  15. /*
  16.  * AREPItems importja az örököltetéshez 
  17.  */
  18. REPClasses::import('AREPItems');
  19. /**
  20.  * MySQL adatbázisban egy lekérdezés eredményeit tároló iterálható
  21.  * objektumot hoz létre
  22.  *
  23.  * @author Takács Ákos (Rimelek), programmer [at] rimelek [dot] hu
  24.  * @copyright Copyright (C) 2010, Takács Ákos
  25.  * @package REPagination
  26.  */
  27. class REPMySQLItems extends AREPItems
  28. {
  29.     /**
  30.      * Adatbázis kapcsolatazonosító
  31.      * @var resource 
  32.      */
  33.     protected $connectId = null;
  34.     /**
  35.      * Lekérdezés erőforrásazonosítója
  36.      * @var resource 
  37.      */
  38.     protected $resource = null;
  39.  
  40.     /**
  41.      * A select lekérdezés from utáni része.
  42.      * @var string 
  43.      */
  44.     protected $from = "";
  45.     /**
  46.      * A select lekérdezés-ben a lekérdezendő mezőnevek listája
  47.      * vesszővel elválasztva
  48.      * @var string 
  49.      */
  50.     protected $fields = "";
  51.  
  52.     /**
  53.      * A limit záradék offset értéke
  54.      * @var int 
  55.      */
  56.     protected $offset = 0;
  57.  
  58.     /**
  59.      * A limit záradék limit értéke
  60.      * @var int 
  61.      */
  62.     protected $limit = null;
  63.  
  64.     /**
  65.      * Az iteráció közben az aktuális offset érték
  66.      * @var int 
  67.      */
  68.     protected $pos = 0;
  69.     /**
  70.      * Ettől az indextől kezdve kezdődik az iteráció. Az előtte lévő
  71.      * rekordokat átugorja.
  72.      * @var int 
  73.      */
  74.     protected $startIndex = 0;
  75.  
  76.     /**
  77.      *
  78.      * @var Az aktuális iterálható rekordok száma
  79.      */
  80.     protected $count = null;
  81.     /**
  82.      * A limit nélküli lekérdezésre illeszkedő sorok száma
  83.      * @var int 
  84.      */
  85.     protected $max = null;
  86.  
  87.     /**
  88.      * 
  89.      * @param string $from A select lekérdezés from utáni része
  90.      * @param array $fields A lekérdezendő mezők listája tömbben
  91.      *                 Elhagyása esetén minden mezőt lekérdez
  92.      * @param resource $connectId Kapcsolatazonosító
  93.      */
  94.     public function  __construct($from,$fields=array(),$connectId=null)
  95.     {
  96.         $this->from = $from;
  97.         $this->fields = (is_array($fieldsand count($fields))
  98.                 ? implode(', ',$fields'*';
  99.         if (is_resource($connectId))
  100.         {
  101.             $this->connectId = $connectId;
  102.         }
  103.     }
  104.  
  105.     /**
  106.      * @return resource A kapcsolatazonosító
  107.      */
  108.     public function connectId()
  109.     {
  110.         return $this->connectId;
  111.     }
  112.  
  113.     /**
  114.      * Beállítja, illetve lekérdezi a {@link $limit} értékét.
  115.      *
  116.      *
  117.      * @param $arg1 Ha a 2. paraméter üres, akkor limit. Egyébként offset
  118.      * @param $arg2 offset
  119.      *
  120.      * @return string Az sql-be beillesztendő limit záradék
  121.      */
  122.     public function limit($arg1=null$arg2=null)
  123.     {
  124.         $args func_get_args();
  125.         $num func_num_args();
  126.         if ($num >= 2)
  127.         {
  128.             $this->offset = (int)$args[0];
  129.             $this->limit = (int)$args[1];
  130.         
  131.         else if ($num == 1)
  132.         {
  133.             $this->limit = (int)$args[0];
  134.         }
  135.         $ret '';
  136.         if (!is_null($this->limit))
  137.         {
  138.             $ret 'limit ';
  139.             if (!is_null($this->offset))
  140.             {
  141.                 $ret .= $this->offset.", ";
  142.             }
  143.             $ret .= $this->limit;
  144.         }
  145.         return $ret;
  146.     }
  147.  
  148.     /**
  149.      * @return resource A lekérdezés erőforrás azonosítója
  150.      */
  151.     protected function resource()
  152.     
  153.         if (!is_resource($this->resource))
  154.         {
  155.             $limit (!is_null($this->limit))
  156.                 ? "limit ".$this->offset.", ".$this->limit : "";
  157.             $sql "select ".$this->fields." from ".$this->from" ".$limit
  158.             $this->resource = $this->query($sql);
  159.         
  160.         return $this->resource;
  161.     }
  162.  
  163.     /**
  164.      *
  165.      * @param string $sql Komplett sql lekérdezés
  166.      * @param resource $connectId Kapcsolatazonosító
  167.      * @return resource A lekérdezés erőforrás azonosítója
  168.      */
  169.     protected function query($sql,$connectId=null)
  170.     {
  171.         if (!is_resource($connectId))
  172.         {
  173.             $connectId $this->connectId;
  174.         }
  175.         $resource !is_resource($connectId)
  176.                 ? mysql_query($sql)
  177.                 : mysql_query($sql,$connectId);
  178.         return $resource;
  179.     }
  180.  
  181.     /**
  182.      * Létrehoz egy új azonos típusú példányt, mint az objektum, amin hívjuk a metódust.
  183.      *
  184.      * @param resource $connectId Kapcsolatazonosító
  185.      * @param int $offset Lekérdezés limit záradékának offset értéke
  186.      * @param int $limit Limit záradék limit értéke
  187.      * @return REPMySQLItems 
  188.      */
  189.     public function newInstance($connectId,$offset$limit)
  190.     {
  191.         $obj clone $this;
  192.         if (is_resource($obj->resource))
  193.         {
  194.             $obj->startIndex = (int)$offset;
  195.         }
  196.         $obj->limit($offset$limit);
  197.         return $obj;
  198.     }
  199.  
  200.     /**
  201.      * @ignore
  202.      */
  203.     public function offsetExists($offset)
  204.     {
  205.         return $this->count(> (int)$offset;
  206.     }
  207.  
  208.     /**
  209.      * @ignore
  210.      */
  211.     public function offsetUnset($offset)
  212.     {
  213.         throw new Exception("unset művelet tiltott (".get_class($this).")");
  214.     }
  215.  
  216.     /**
  217.      * @ignore
  218.      */
  219.     public function offsetGet($offset)
  220.     {
  221.         $offset $offset+$this->startIndex;
  222.         mysql_data_seek($this->resource(),(int)$offset);
  223.         return isset($this[$offset]mysql_fetch_assoc($this->resource()) null;
  224.     }
  225.  
  226.     /**
  227.      * @ignore
  228.      */
  229.     public function offsetSet($offset$value)
  230.     {
  231.         throw new Exception("Értékadás tiltott (".get_class($this).")");
  232.     }
  233.  
  234.     /**
  235.      * @ignore
  236.      */
  237.     public function current()
  238.     {
  239.         $pos $this->pos;
  240.         mysql_data_seek($this->resource(),$pos);
  241.         return mysql_fetch_assoc($this->resource());
  242.     }
  243.  
  244.     /**
  245.      * @ignore
  246.      */
  247.     public function key()
  248.     {
  249.         $pos $this->pos-$this->startIndex;
  250.         return $pos $this->count($pos null;
  251.     }
  252.  
  253.     /**
  254.      * @ignore
  255.      */
  256.     public function next()
  257.     {
  258.         $this->pos++;
  259.     }
  260.  
  261.     /**
  262.      * @ignore
  263.      */
  264.     public function rewind()
  265.     {
  266.         $this->pos = $this->startIndex;
  267.     }
  268.  
  269.     /**
  270.      * @ignore
  271.      */
  272.     public function valid()
  273.     {
  274.         return $this->key(!== null;
  275.     }
  276.  
  277.     /**
  278.      * @return int A lekérdezésre limit nélkül illeszkedő sorok száma
  279.      */
  280.     public function max()
  281.     {
  282.         if (is_null($this->max))
  283.         {
  284.             $this->max = array_shift(mysql_fetch_row(mysql_query(
  285.                 "select count(*) from ".$this->from)));
  286.         }
  287.         return $this->max;
  288.     }
  289.  
  290.     /**
  291.      * @return int A lekérdezésre limit -tel együtt illeszkedő sorok száma
  292.      */
  293.     public function count()
  294.     {
  295.         if (is_null($this->count))
  296.         {
  297.             $select "select count(*) from
  298.                 (select * from ".$this->from." ".$this->limit().") as t";
  299.             $query $this->query($select);
  300.             $fetch mysql_fetch_row($query);
  301.             $this->count = (int)array_shift($fetch);
  302.         }
  303.         else if (is_resource($this->resource))
  304.         {
  305.             $this->count = mysql_num_rows($this->resource);
  306.         }
  307.         $count $this->count-$this->startIndex;
  308.         if (!is_null($this->limitand $this->limit < $count)
  309.         {
  310.             $count $this->limit;
  311.         }
  312.  
  313.         return $count;
  314.     }
  315. }
  316. ?>

Documentation generated on Sat, 06 Mar 2010 22:00:17 +0100 by phpDocumentor 1.4.1