Source for file jDbConnection.class.php

Documentation is available at jDbConnection.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  db
  5. @author      Laurent Jouanneau
  6. @contributor Julien Issler
  7. @copyright   2005-2006 Laurent Jouanneau
  8. @copyright   2007 Julien Issler
  9. *
  10. *  This class was get originally from the Copix project (CopixDbConnection, Copix 2.3dev20050901, http://www.copix.org)
  11. *  However only few lines of code are still copyrighted 2001-2005 CopixTeam (LGPL licence).
  12. *  Initial authors of this Copix classes are Gerald Croes and Laurent Jouanneau,
  13. *  and this class was adapted/improved for Jelix by Laurent Jouanneau
  14. *
  15. @link        http://www.jelix.org
  16. @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  17. */
  18.  
  19. /**
  20.  * @package  jelix
  21.  * @subpackage db
  22.  */
  23. abstract class jDbConnection {
  24.  
  25.     /**
  26.     * profil properties used by the connector
  27.     * @var array 
  28.     */
  29.     public $profil;
  30.  
  31.     /**
  32.      * The database type name (mysql, pgsql ...)
  33.      */
  34.     public $dbms;
  35.  
  36.     /**
  37.     * The last error message if any
  38.     * @var string 
  39.     */
  40.     public $msgError = '';
  41.  
  42.     /**
  43.      * last executed query
  44.      */
  45.     public $lastQuery;
  46.  
  47.     /**
  48.     * Are we using an automatic commit ?
  49.     * @var boolean 
  50.     */
  51.     private $_autocommit true;
  52.  
  53.     /**
  54.     * the internal connection.
  55.     */
  56.     protected $_connection = null;
  57.  
  58.     /**
  59.     * do a connection to the database, using properties of the given profil
  60.     * @param array $profil  profil properties
  61.     */
  62.     function __construct($profil){
  63.         $this->profil = $profil;
  64.         $this->dbms = $profil['driver'];
  65.         $this->_connection = $this->_connect();
  66.     }
  67.  
  68.     function __destruct(){
  69.         if($this->_connection !== null){
  70.             $this->_disconnect ();
  71.         }
  72.     }
  73.  
  74.     /**
  75.     * Launch a SQL Query which returns rows (typically, a SELECT statement)
  76.     * @param   string   $queryString   the SQL query
  77.     * @return  jDbResultSet|boolean False if the query has failed.
  78.     */
  79.     public function query ($queryString){
  80.         $this->lastQuery = $queryString;
  81.         $result $this->_doQuery ($queryString);
  82.         return $result;
  83.     }
  84.  
  85.     /**
  86.     * Launch a SQL Query with limit parameter (so only a subset of a result)
  87.     * @param   string   $queryString   the SQL query
  88.     * @param   integer  $limitOffset   the offset of the first row to return
  89.     * @param   integer  $limitCount    the maximum of number of rows to return
  90.     * @return  jDbResultSet|boolean SQL Select. False if the query has failed.
  91.     */
  92.     public function limitQuery ($queryString$limitOffset$limitCount){
  93.         $this->lastQuery = $queryString;
  94.         $result $this->_doLimitQuery ($queryStringintval($limitOffset)intval($limitCount));
  95.         return $result;
  96.     }
  97.  
  98.     /**
  99.     * Launch a SQL Query (update, delete..) which doesn't return rows
  100.     * @param   string   $query   the SQL query
  101.     * @return  integer  the number of affected rows. False if the query has failed.
  102.     */
  103.     public function exec ($query){
  104.         $this->lastQuery = $query;
  105.         $result $this->_doExec ($query);
  106.         return $result;
  107.     }
  108.  
  109.     /**
  110.     * Escape and quotes strings. if null, will only return the text "NULL"
  111.     * @param string $text   string to quote
  112.     * @param boolean $checknull if true, check if $text is a null value, and then return NULL
  113.     * @return string escaped string
  114.     */
  115.     public function quote($text$checknull=true){
  116.         if($checknull)
  117.             return (is_null ($text'NULL' "'".$this->_quote($text)."'");
  118.         else
  119.             return "'".$this->_quote ($text)."'";
  120.     }
  121.  
  122.     /**
  123.       * Prefix the given table with the prefix specified in the connection's profile
  124.       * If there's no prefix for the connection's profile, return the table's name unchanged.
  125.       *
  126.       * @param string $table the table's name
  127.       * @return string the prefixed table's name
  128.       * @author Julien Issler
  129.       * @since 1.0
  130.       */
  131.     public function prefixTable($table_name){
  132.         if(!isset($this->profil['table_prefix']))
  133.             return $table_name;
  134.         return $this->profil['table_prefix'].$table_name;
  135.     }
  136.  
  137.     /**
  138.       * Check if the current connection has a table prefix set
  139.       *
  140.       * @return boolean 
  141.       * @author Julien Issler
  142.       * @since 1.0
  143.       */
  144.     public function hasTablePrefix(){
  145.         return (isset($this->profil['table_prefix']&& $this->profil['table_prefix'!= '');
  146.     }
  147.  
  148.     /**
  149.     * sets the autocommit state
  150.     * @param boolean state the status of autocommit
  151.     */
  152.     public function setAutoCommit($state=true){
  153.         $this->_autocommit $state;
  154.         $this->_autoCommitNotify ($this->_autocommit);
  155.     }
  156.  
  157.     /**
  158.      * begin a transaction. Call it after doQuery, doLimitQuery, doExec,
  159.      * And then commit() or rollback()
  160.      */
  161.     abstract public function beginTransaction ();
  162.  
  163.     /**
  164.      * validate all queries and close a transaction
  165.      */
  166.     abstract public function commit ();
  167.  
  168.     /**
  169.      * cancel all queries of a transaction and close the transaction
  170.      */
  171.     abstract public function rollback ();
  172.  
  173.     /**
  174.      * prepare a query
  175.      * @param string $query a sql query with parameters
  176.      * @return statement a statement
  177.      */
  178.     abstract public function prepare ($query);
  179.  
  180.     /**
  181.      * @return string the last error description
  182.      */
  183.     abstract public function errorInfo();
  184.  
  185.     /**
  186.      * @return integer the last error code
  187.      */
  188.     abstract public function errorCode();
  189.  
  190.     /**
  191.      * return the id value of the last inserted row.
  192.      * Some driver need a sequence name, so give it at first parameter
  193.      * @param string $fromSequence the sequence name
  194.      * @return integer the id value
  195.      */
  196.     abstract public function lastInsertId($fromSequence='');
  197.  
  198.     /**
  199.      * Not implemented
  200.      * @param integer $id the attribut id
  201.      * @return string the attribute value
  202.      */
  203.     public function getAttribute($id)return '';}
  204.  
  205.     /**
  206.      * Not implemented
  207.      * @param integer $id the attribut id
  208.      * @param string $value the attribute value
  209.      */
  210.     public function setAttribute($id$value)}
  211.  
  212.     /**
  213.      *
  214.      */
  215.     public function lastIdInTable($fieldName$tableName){
  216.         $rs $this->query ('SELECT MAX('.$fieldName.') as ID FROM '.$tableName);
  217.         if (($rs !== null&& $r $rs->fetch ()){
  218.             return $r->ID;
  219.         }
  220.         return 0;
  221.     }
  222.  
  223.     /**
  224.     * Notify the changes on autocommit
  225.     * Drivers may overload this
  226.     * @param boolean state the new state of autocommit
  227.     */
  228.     abstract protected function _autoCommitNotify ($state);
  229.  
  230.     /**
  231.     * return a connection identifier or false/null if there is an error
  232.     * @return integer connection identifier
  233.     */
  234.     abstract protected function _connect ();
  235.  
  236.     /**
  237.     * do a disconnection
  238.     * (no need to do a test on the connection id)
  239.     */
  240.     abstract protected function _disconnect ();
  241.  
  242.     /**
  243.     * do a query which return results
  244.     * @return jDbResultSet/boolean 
  245.     */
  246.     abstract protected function _doQuery ($queryString);
  247.     /**
  248.     * do a query which return nothing
  249.     * @return jDbResultSet/boolean 
  250.     */
  251.     abstract protected function _doExec ($queryString);
  252.  
  253.     /**
  254.     * do a query which return a limited number of results
  255.     * @return jDbResultSet/boolean 
  256.     */
  257.     abstract protected function _doLimitQuery ($queryString$offset$number);
  258.  
  259.     /**
  260.     * do the escaping of a string.
  261.     * you should override it into the driver
  262.     */
  263.     protected function _quote($text){
  264.         return addslashes($text);
  265.     }
  266. }
  267. ?>

Documentation generated on Wed, 07 Sep 2011 13:47:11 +0200 by phpDocumentor 1.4.3