Source for file mysqli.dbconnection.php

Documentation is available at mysqli.dbconnection.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage db_driver
  5. @author     Gérald Croes, Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @contributor Sylvain de Vathaire, Julien Issler
  8. @contributor Florian Lonqueu-Brochard
  9. @copyright  2001-2005 CopixTeam, 2005-2012 Laurent Jouanneau
  10. @copyright  2009 Julien Issler
  11. @copyright  2012 Florian Lonqueu-Brochard
  12. @link      http://www.jelix.org
  13. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  14. */
  15. require_once(dirname(__FILE__).'/mysqli.dbresultset.php');
  16. require_once(dirname(__FILE__).'/mysqli.dbstatement.php');
  17.  
  18. /**
  19.  *
  20.  * @package    jelix
  21.  * @subpackage db_driver
  22.  */
  23. class mysqliDbConnection extends jDbConnection {
  24.  
  25.     protected $_charsets =array'UTF-8'=>'utf8''ISO-8859-1'=>'latin1');
  26.     private $_usesMysqlnd null;
  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('mysqli_connect')){
  32.             throw new jException('jelix~db.error.nofunction','mysql');
  33.         }
  34.         parent::__construct($profile);
  35.  
  36.         $this->dbms = 'mysql';
  37.     }
  38.  
  39.     /**
  40.      * enclose the field name
  41.      * @param string $fieldName the field name
  42.      * @return string the enclosed field name
  43.      * @since 1.1.1
  44.      */
  45.     public function encloseName($fieldName){
  46.         return '`'.$fieldName.'`';
  47.     }
  48.  
  49.     /**
  50.     * begin a transaction
  51.     */
  52.     public function beginTransaction (){
  53.         $this->_autoCommitNotify(false);
  54.     }
  55.  
  56.     /**
  57.     * Commit since the last begin
  58.     */
  59.     public function commit (){
  60.         $this->_connection->commit();
  61.         $this->_autoCommitNotify(true);
  62.     }
  63.  
  64.     /**
  65.     * Rollback since the last begin
  66.     */
  67.     public function rollback (){
  68.         $this->_connection->rollback();
  69.         $this->_autoCommitNotify(true);
  70.     }
  71.  
  72.     /**
  73.     * 
  74.     */
  75.     public function prepare ($query){
  76.         $res $this->_connection->prepare($query);
  77.         if$this->_usesMysqlnd === null {
  78.             ifis_callablearray($res'get_result') ) ) {
  79.                 $this->_usesMysqlnd true;
  80.             else {
  81.                 $this->_usesMysqlnd false;
  82.             }
  83.         }
  84.         if($res){
  85.             $rsnew mysqliDbStatement($res$this->_usesMysqlnd);
  86.         }else{
  87.             throw new jException('jelix~db.error.query.bad',  $this->_connection->error.'('.$query.')');
  88.         }
  89.         return $rs;
  90.     }
  91.  
  92.     public function errorInfo(){
  93.         return array'HY000' ,$this->_connection->errno$this->_connection->error);
  94.     }
  95.  
  96.     public function errorCode(){
  97.        return $this->_connection->errno;
  98.     }
  99.  
  100.     protected function _connect (){
  101.         $host ($this->profile['persistent']'p:'.$this->profile['host'$this->profile['host'];
  102.         $cnx @new mysqli ($host$this->profile['user']$this->profile['password']$this->profile['database']);
  103.         if ($cnx->connect_errno{
  104.             throw new jException('jelix~db.error.connection',$this->profile['host']);
  105.         }
  106.         else{
  107.             if(isset($this->profile['force_encoding']&& $this->profile['force_encoding'== true
  108.               && isset($this->_charsets[jApp::config()->charset])){
  109.                 $cnx->set_charset($this->_charsets[jApp::config()->charset]);
  110.             }
  111.             return $cnx;
  112.         }
  113.     }
  114.  
  115.     protected function _disconnect (){
  116.         return $this->_connection->close();
  117.     }
  118.  
  119.  
  120.     protected function _doQuery ($query){
  121.         if ($qI $this->_connection->query($query)){
  122.             return new mysqliDbResultSet ($qI);
  123.         }else{
  124.             throw new jException('jelix~db.error.query.bad',  $this->_connection->error.'('.$query.')');
  125.         }
  126.     }
  127.  
  128.     protected function _doExec($query){
  129.         if ($qI $this->_connection->query($query)){
  130.             return $this->_connection->affected_rows;
  131.         }else{
  132.             throw new jException('jelix~db.error.query.bad',  $this->_connection->error.'('.$query.')');
  133.         }
  134.     }
  135.  
  136.     protected function _doLimitQuery ($queryString$offset$number){
  137.         $queryString.= ' LIMIT '.$offset.','.$number;
  138.         $this->lastQuery = $queryString;
  139.         $result $this->_doQuery($queryString);
  140.         return $result;
  141.     }
  142.  
  143.  
  144.     public function lastInsertId($fromSequence=''){// on n'a pas besoin de l'argument pour mysqli
  145.         return $this->_connection->insert_id;
  146.     }
  147.  
  148.     /**
  149.     * tell mysql to be autocommit or not
  150.     * @param boolean $state the state of the autocommit value
  151.     * @return void 
  152.     */
  153.     protected function _autoCommitNotify ($state){
  154.         $this->_connection->autocommit($state);
  155.     }
  156.  
  157.     /**
  158.      * @return string escaped text or binary string
  159.      */
  160.     protected function _quote($text$binary{
  161.         return $this->_connection->real_escape_string($text);
  162.     }
  163.  
  164.     /**
  165.      *
  166.      * @param integer $id the attribut id
  167.      * @return string the attribute value
  168.      * @see PDO::getAttribute()
  169.      */
  170.     public function getAttribute($id{
  171.         switch($id{
  172.             case self::ATTR_CLIENT_VERSION:
  173.                 return $this->_connection->get_client_info();
  174.             case self::ATTR_SERVER_VERSION:
  175.                 return $this->_connection->server_info;
  176.                 break;
  177.             case self::ATTR_SERVER_INFO:
  178.                 return $this->_connection->host_info;
  179.         }
  180.         return "";
  181.     }
  182.  
  183.     /**
  184.      * 
  185.      * @param integer $id the attribut id
  186.      * @param string $value the attribute value
  187.      * @see PDO::setAttribute()
  188.      */
  189.     public function setAttribute($id$value{
  190.     }
  191.  
  192.  
  193.     /**
  194.      * Execute several sql queries
  195.      */
  196.     public function execMulti($queries){
  197.         $query_res $this->_connection->multi_query($queries);
  198.         while($this->_connection->more_results()){
  199.             $this->_connection->next_result();
  200.             if($discard $this->_connection->store_result()){
  201.                 $discard->free();
  202.             }
  203.         }
  204.         return $query_res;
  205.     }
  206.  
  207. }

Documentation generated on Mon, 26 Oct 2015 21:57:45 +0100 by phpDocumentor 1.4.3