Source for file mysql.dbconnection.php

Documentation is available at mysql.dbconnection.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Croes Gérald, Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @contributor Sylvain de Vathaire, Julien Issler
  8. @copyright  2001-2005 CopixTeam, 2005-2010 Laurent Jouanneau
  9. @copyright  2009 Julien Issler
  10. *  This class was get originally from the Copix project (CopixDbConnectionMysql, Copix 2.3dev20050901, http://www.copix.org)
  11. *  Few lines of code are still copyrighted 2001-2005 CopixTeam (LGPL licence).
  12. *  Initial authors of this Copix class are Gerald Croes and Laurent Jouanneau,
  13. *  and this class was adapted 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.  *
  21.  * @package    jelix
  22.  * @subpackage db_driver
  23.  */
  24. class mysqlDbConnection extends jDbConnection {
  25.  
  26.     protected $_charsets =array'UTF-8'=>'utf8''ISO-8859-1'=>'latin1');
  27.  
  28.     function __construct($profile){
  29.         // à cause du @, on est obligé de tester l'existence de mysql, sinon en cas d'absence
  30.         // on a droit à un arret sans erreur
  31.         if(!function_exists('mysql_connect')){
  32.             throw new jException('jelix~db.error.nofunction','mysql');
  33.         }
  34.         parent::__construct($profile);
  35.     }
  36.  
  37.     /**
  38.      * enclose the field name
  39.      * @param string $fieldName the field name
  40.      * @return string the enclosed field name
  41.      * @since 1.1.1
  42.      */
  43.     public function encloseName($fieldName){
  44.         return '`'.$fieldName.'`';
  45.     }
  46.  
  47.     /**
  48.     * begin a transaction
  49.     */
  50.     public function beginTransaction (){
  51.         $this->_doExec ('SET AUTOCOMMIT=0');
  52.         $this->_doExec ('BEGIN');
  53.     }
  54.  
  55.     /**
  56.     * Commit since the last begin
  57.     */
  58.     public function commit (){
  59.         $this->_doExec ('COMMIT');
  60.         $this->_doExec ('SET AUTOCOMMIT=1');
  61.     }
  62.  
  63.     /**
  64.     * Rollback since the last BEGIN
  65.     */
  66.     public function rollback (){
  67.         $this->_doExec ('ROLLBACK');
  68.         $this->_doExec ('SET AUTOCOMMIT=1');
  69.     }
  70.  
  71.     /**
  72.     *
  73.     */
  74.     public function prepare ($query){
  75.         throw new jException('jelix~db.error.feature.unsupported'array('mysql','prepare'));
  76.     }
  77.  
  78.     public function errorInfo(){
  79.         return array'HY000' ,mysql_errno($this->_connection)mysql_error($this->_connection));
  80.     }
  81.  
  82.     public function errorCode(){
  83.        return mysql_errno($this->_connection);
  84.     }
  85.  
  86.     protected function _connect (){
  87.         $funcconnect($this->profile['persistent']'mysql_pconnect':'mysql_connect');
  88.         if($cnx @$funcconnect ($this->profile['host']$this->profile['user']$this->profile['password'])){
  89.             if(isset($this->profile['force_encoding']&& $this->profile['force_encoding'== true
  90.               && isset($this->_charsets[$GLOBALS['gJConfig']->charset])){
  91.                 mysql_query("SET NAMES '".$this->_charsets[$GLOBALS['gJConfig']->charset]."'"$cnx);
  92.             }
  93.             return $cnx;
  94.         }else{
  95.             throw new jException('jelix~db.error.connection',$this->profile['host']);
  96.         }
  97.     }
  98.  
  99.     protected function _disconnect (){
  100.         return mysql_close ($this->_connection);
  101.     }
  102.  
  103.  
  104.     protected function _doQuery ($query){
  105.         // ici et non lors du connect, pour le cas où il y a plusieurs connexion active
  106.         if(!mysql_select_db ($this->profile['database']$this->_connection)){
  107.             if(mysql_errno($this->_connection))
  108.                 throw new jException('jelix~db.error.database.unknow',$this->profile['database']);
  109.             else
  110.                 throw new jException('jelix~db.error.connection.closed',$this->profile['name']);
  111.         }
  112.  
  113.         if ($qI mysql_query ($query$this->_connection)){
  114.             return new mysqlDbResultSet ($qI);
  115.         }else{
  116.             throw new jException('jelix~db.error.query.bad',  mysql_error($this->_connection).'('.$query.')');
  117.         }
  118.     }
  119.  
  120.     protected function _doExec($query){
  121.         if(!mysql_select_db ($this->profile['database']$this->_connection))
  122.             throw new jException('jelix~db.error.database.unknow',$this->profile['database']);
  123.  
  124.         if ($qI mysql_query ($query$this->_connection)){
  125.             return mysql_affected_rows($this->_connection);
  126.         }else{
  127.             throw new jException('jelix~db.error.query.bad',  mysql_error($this->_connection).'('.$query.')');
  128.         }
  129.     }
  130.  
  131.     protected function _doLimitQuery ($queryString$offset$number){
  132.         $queryString.= ' LIMIT '.$offset.','.$number;
  133.         $result $this->_doQuery($queryString);
  134.         return $result;
  135.     }
  136.  
  137.  
  138.     public function lastInsertId($fromSequence=''){// on n'a pas besoin de l'argument pour mysql
  139.         return mysql_insert_id ($this->_connection);
  140.     }
  141.  
  142.     /**
  143.     * tell mysql to be autocommit or not
  144.     * @param boolean state the state of the autocommit value
  145.     * @return void 
  146.     */
  147.     protected function _autoCommitNotify ($state){
  148.         $this->query ('SET AUTOCOMMIT='.($state '1' '0'));
  149.     }
  150.  
  151.     /**
  152.      * @return string escaped text or binary string
  153.      */
  154.     protected function _quote($text$binary{
  155.         return mysql_real_escape_string($text,  $this->_connection);
  156.     }
  157.  
  158. }

Documentation generated on Thu, 22 Mar 2012 22:17:53 +0100 by phpDocumentor 1.4.3