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-2010 Laurent Jouanneau
  8. @copyright   2007-2009 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.     const FETCH_OBJ 5;
  26.     const FETCH_CLASS 8;
  27.     const FETCH_INTO 9;
  28.     const ATTR_AUTOCOMMIT 0;
  29.     const ATTR_ERRMODE 3;
  30.     const ATTR_CURSOR 10;
  31.     const CURSOR_FWDONLY 0;
  32.     const CURSOR_SCROLL 1;
  33.  
  34.     /**
  35.     * profile properties used by the connector
  36.     * @var array 
  37.     */
  38.     public $profile;
  39.  
  40.     /**
  41.      * The database type name (mysql, pgsql ...)
  42.      */
  43.     public $dbms;
  44.  
  45.     /**
  46.     * The last error message if any
  47.     * @var string 
  48.     */
  49.     public $msgError = '';
  50.  
  51.     /**
  52.      * last executed query
  53.      */
  54.     public $lastQuery;
  55.  
  56.     /**
  57.     * Are we using an automatic commit ?
  58.     * @var boolean 
  59.     */
  60.     private $_autocommit true;
  61.  
  62.     /**
  63.     * the internal connection.
  64.     */
  65.     protected $_connection = null;
  66.  
  67.     /**
  68.     * do a connection to the database, using properties of the given profile
  69.     * @param array $profile  profile properties
  70.     */
  71.     function __construct($profile){
  72.         $this->profile = $profile;
  73.         $this->dbms = $profile['driver'];
  74.         $this->_connection = $this->_connect();
  75.     }
  76.  
  77.     function __destruct(){
  78.         if($this->_connection !== null){
  79.             $this->_disconnect ();
  80.         }
  81.     }
  82.  
  83.     /**
  84.     * Launch a SQL Query which returns rows (typically, a SELECT statement)
  85.     * @param string   $queryString   the SQL query
  86.     * @param integer  $fetchmode   FETCH_OBJ, FETCH_CLASS or FETCH_INTO
  87.     * @param string|object    $param   class name if FETCH_CLASS, an object if FETCH_INTO. else null.
  88.     * @param array  $ctoargs  arguments for the constructor if FETCH_CLASS
  89.     * @return  jDbResultSet|boolean False if the query has failed.
  90.     */
  91.     public function query ($queryString$fetchmode self::FETCH_OBJ$arg1 null$ctoargs null){
  92.         $this->lastQuery = $queryString;
  93.         $result $this->_doQuery ($queryString);
  94.         if ($fetchmode != self::FETCH_OBJ{
  95.             $result->setFetchMode($fetchmode$arg1$ctoargs);
  96.         }
  97.         return $result;
  98.     }
  99.  
  100.     /**
  101.     * Launch a SQL Query with limit parameter (so only a subset of a result)
  102.     * @param   string   $queryString   the SQL query
  103.     * @param   integer  $limitOffset   the offset of the first row to return
  104.     * @param   integer  $limitCount    the maximum of number of rows to return
  105.     * @return  jDbResultSet|boolean SQL Select. False if the query has failed.
  106.     */
  107.     public function limitQuery ($queryString$limitOffset$limitCount){
  108.         $this->lastQuery = $queryString;
  109.         $result $this->_doLimitQuery ($queryStringintval($limitOffset)intval($limitCount));
  110.         return $result;
  111.     }
  112.  
  113.     /**
  114.     * Launch a SQL Query (update, delete..) which doesn't return rows
  115.     * @param   string   $query   the SQL query
  116.     * @return  integer  the number of affected rows. False if the query has failed.
  117.     */
  118.     public function exec ($query){
  119.         $this->lastQuery = $query;
  120.         $result $this->_doExec ($query);
  121.         return $result;
  122.     }
  123.  
  124.     /**
  125.     * Escape and quotes strings. if null, will only return the text "NULL"
  126.     * @param string $text   string to quote
  127.     * @param boolean $checknull if true, check if $text is a null value, and then return NULL
  128.     * @return string escaped string
  129.     */
  130.     public function quote($text$checknull=true$binary false){
  131.         if($checknull)
  132.             return (is_null ($text'NULL' "'".$this->_quote($text$binary)."'");
  133.         else
  134.             return "'".$this->_quote ($text$binary)."'";
  135.     }
  136.  
  137.     /**
  138.      * enclose the field name
  139.      * @param string $fieldName the field name
  140.      * @return string the enclosed field name
  141.      * @since 1.1.1
  142.      */
  143.     public function encloseName($fieldName){
  144.         return $fieldName;
  145.     }
  146.     
  147.     /**
  148.      * @deprecated since 1.1.2
  149.      * @see encloseName
  150.      */
  151.     public function encloseFieldName($fieldName{
  152.         return $this->encloseName($fieldName);
  153.     }
  154.  
  155.     /**
  156.       * Prefix the given table with the prefix specified in the connection's profile
  157.       * If there's no prefix for the connection's profile, return the table's name unchanged.
  158.       *
  159.       * @param string $table the table's name
  160.       * @return string the prefixed table's name
  161.       * @author Julien Issler
  162.       * @since 1.0
  163.       */
  164.     public function prefixTable($table_name){
  165.         if(!isset($this->profile['table_prefix']))
  166.             return $table_name;
  167.         return $this->profile['table_prefix'].$table_name;
  168.     }
  169.  
  170.     /**
  171.       * Check if the current connection has a table prefix set
  172.       *
  173.       * @return boolean 
  174.       * @author Julien Issler
  175.       * @since 1.0
  176.       */
  177.     public function hasTablePrefix(){
  178.         return (isset($this->profile['table_prefix']&& $this->profile['table_prefix'!= '');
  179.     }
  180.  
  181.     /**
  182.     * sets the autocommit state
  183.     * @param boolean state the status of autocommit
  184.     */
  185.     public function setAutoCommit($state=true){
  186.         $this->_autocommit $state;
  187.         $this->_autoCommitNotify ($this->_autocommit);
  188.     }
  189.  
  190.     /**
  191.      * begin a transaction. Call it before query, limitQuery, exec
  192.      * And then commit() or rollback()
  193.      */
  194.     abstract public function beginTransaction ();
  195.  
  196.     /**
  197.      * validate all queries and close a transaction
  198.      */
  199.     abstract public function commit ();
  200.  
  201.     /**
  202.      * cancel all queries of a transaction and close the transaction
  203.      */
  204.     abstract public function rollback ();
  205.  
  206.     /**
  207.      * prepare a query
  208.      * @param string $query a sql query with parameters
  209.      * @return statement a statement
  210.      */
  211.     abstract public function prepare ($query);
  212.  
  213.     /**
  214.      * @return string the last error description
  215.      */
  216.     abstract public function errorInfo();
  217.  
  218.     /**
  219.      * @return integer the last error code
  220.      */
  221.     abstract public function errorCode();
  222.  
  223.     /**
  224.      * return the id value of the last inserted row.
  225.      * Some driver need a sequence name, so give it at first parameter
  226.      * @param string $fromSequence the sequence name
  227.      * @return integer the id value
  228.      */
  229.     abstract public function lastInsertId($fromSequence='');
  230.  
  231.     /**
  232.      * Not implemented
  233.      * @param integer $id the attribut id
  234.      * @return string the attribute value
  235.      */
  236.     public function getAttribute($id)return '';}
  237.  
  238.     /**
  239.      * Not implemented
  240.      * @param integer $id the attribut id
  241.      * @param string $value the attribute value
  242.      */
  243.     public function setAttribute($id$value)}
  244.  
  245.     /**
  246.      *
  247.      */
  248.     public function lastIdInTable($fieldName$tableName){
  249.         $rs $this->query ('SELECT MAX('.$fieldName.') as ID FROM '.$tableName);
  250.         if (($rs !== null&& $r $rs->fetch ()){
  251.             return $r->ID;
  252.         }
  253.         return 0;
  254.     }
  255.  
  256.     /**
  257.     * Notify the changes on autocommit
  258.     * Drivers may overload this
  259.     * @param boolean state the new state of autocommit
  260.     */
  261.     abstract protected function _autoCommitNotify ($state);
  262.  
  263.     /**
  264.     * return a connection identifier or false/null if there is an error
  265.     * @return integer connection identifier
  266.     */
  267.     abstract protected function _connect ();
  268.  
  269.     /**
  270.     * do a disconnection
  271.     * (no need to do a test on the connection id)
  272.     */
  273.     abstract protected function _disconnect ();
  274.  
  275.     /**
  276.     * do a query which return results
  277.     * @return jDbResultSet/boolean 
  278.     */
  279.     abstract protected function _doQuery ($queryString);
  280.     /**
  281.     * do a query which return nothing
  282.     * @return jDbResultSet/boolean 
  283.     */
  284.     abstract protected function _doExec ($queryString);
  285.  
  286.     /**
  287.     * do a query which return a limited number of results
  288.     * @return jDbResultSet/boolean 
  289.     */
  290.     abstract protected function _doLimitQuery ($queryString$offset$number);
  291.  
  292.     /**
  293.     * do the escaping of a string.
  294.     * you should override it into the driver
  295.     * @param string $text the text to escape
  296.     * @param boolean $binary true if the content of the string is a binary content
  297.     */
  298.     protected function _quote($text$binary){
  299.         return addslashes($text);
  300.     }
  301. }

Documentation generated on Thu, 22 Mar 2012 22:15:16 +0100 by phpDocumentor 1.4.3