Source for file DBUtilImpl.php

Documentation is available at DBUtilImpl.php

  1. <?php
  2.     /**
  3.      * Database Util Implementation Class
  4.      *
  5.      * @copyright Copyright (c) 2003-2006 Mirchev Ideas Ltd. All rights reserved.
  6.      * @package MIPHPF
  7.      */
  8.     
  9.     /**
  10.      */    
  11.     require_once(MI_DATABASE_ENGINE '.php');
  12.     
  13.  
  14.     /**
  15.      * Implements functions for database
  16.      *
  17.      * @copyright Copyright (c) 2003-2006 Mirchev Ideas Ltd. All rights reserved.
  18.      * @package MIPHPF
  19.      */
  20.     class miDBUtilImpl {
  21.         
  22.         
  23.         /**
  24.          * @access protected
  25.          */
  26.         protected $_link = null;
  27.         
  28.         
  29.         /**
  30.          * @access protected
  31.          */
  32.         protected $_dbHost;
  33.         
  34.         
  35.         /**
  36.          * @access protected
  37.          */ 
  38.         protected $_dbUser;
  39.         
  40.         
  41.         /**
  42.          * @access protected
  43.          */
  44.         protected $_dbPass;
  45.         
  46.         
  47.         /**
  48.          * @access protected
  49.          */
  50.         protected $_dbName;
  51.         
  52.         /**
  53.          * miDBUtilImpl constructor.
  54.          * 
  55.          * Example:
  56.          * <code>
  57.          * <?php
  58.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  59.          * ?>
  60.          * </code>
  61.          * 
  62.          * @access public
  63.          * @param string $dbHost host name
  64.          * @param string $dbUser username
  65.          * @param string $dbPass password
  66.          * @param string $dbName database name
  67.          */
  68.         public function __construct($dbHost$dbUser$dbPass$dbName)
  69.         {
  70.             $this->_dbHost = $dbHost;
  71.             $this->_dbUser = $dbUser;
  72.             $this->_dbPass = $dbPass;
  73.             $this->_dbName = $dbName;
  74.         }
  75.         
  76.         
  77.         /**
  78.          * Connects to a SQL database
  79.          * 
  80.          * Example:
  81.          * <code>
  82.          * <?php
  83.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  84.          * $DBUtilImpl->pconnect();
  85.          * ?>
  86.          * </code>
  87.          * 
  88.          * @access public
  89.          * @return resource Returns a SQL link identifier
  90.          * @throws miDBException
  91.          */
  92.         public function pconnect()
  93.         {
  94.             if (!is_null($this->_link)) {
  95.                 return $this->_link;
  96.             }
  97.             
  98.             $this->_link = sql_connect($this->_dbHost$this->_dbUser$this->_dbPass);
  99.             if ($this->_link === false{
  100.                 throw new miDBException(sql_error(null)miDBException::EXCEPTION_CONNECTsql_errno(null));
  101.             }
  102.             if (sql_select_db($this->_dbName$this->_link=== false{
  103.                 throw new miDBException(sql_error($this->_link)miDBException::EXCEPTION_SELECTDBsql_errno($this->_link));
  104.             }
  105.             
  106.             sql_query('SET NAMES utf8'$this->_link);
  107.             
  108.             return $this->_link;
  109.         }
  110.         
  111.         
  112.         /**
  113.          * Ping the database and attempt to reconnect if necessary
  114.          * 
  115.          * @access public
  116.          * @return false on failure, true on success
  117.          */
  118.         public function ping()
  119.         {
  120.             if (is_null($this->_link)) {
  121.                 $link sql_connect($this->_dbHost$this->_dbUser$this->_dbPass);
  122.             else {
  123.                 $link $this->_link;
  124.             }
  125.             if ($link === false)
  126.                 return false;
  127.             
  128.             return sql_ping($link);
  129.         }
  130.         
  131.         
  132.         /**
  133.          * Executes a SQL query
  134.          * 
  135.          * Example:
  136.          * <code>
  137.          * <?php
  138.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  139.          * $DBUtilImpl->pconnect();
  140.          * $rezult = $DBUtilImpl->execSQL($query);
  141.          * ?>
  142.          * </code>
  143.          * 
  144.          * @access public
  145.          * @param string $query query string
  146.          * @param array $params positional params (optional)
  147.          * @return mixed Resource identifier or true depending on the query
  148.          * @throws miDBException
  149.          */
  150.         public function &execSQL($query$params array())
  151.         {
  152.             $link $this->pconnect();
  153.             
  154.             if (count($params0{
  155.                 $queryParts explode('?'$query);
  156.                 if (count($queryParts!= (count($params)+1))
  157.                     throw new miDBException('Query contains wrong number of positional params.'miDBException::EXCEPTION_QUERY0$query);
  158.                 $query '';
  159.                 foreach ($params as $key => $param)
  160.                     $query .= array_shift($queryParts'"' mysql_real_escape_string($param'"';
  161.                 $query .= array_shift($queryParts);
  162.             }
  163.             
  164.             $result sql_query($query$link);
  165.             if ($result === false{
  166.                 throw new miDBException(sql_error($link)miDBException::EXCEPTION_QUERYsql_errno($link)$query);
  167.             }
  168.             return $result;
  169.         }
  170.         
  171.         
  172.         /**
  173.          * Executes a SQL insert query
  174.          * 
  175.          * Example:
  176.          * <code>
  177.          * <?php
  178.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  179.          * $DBUtilImpl->pconnect();
  180.          * $result = $DBUtilImpl->execSQLInsert($query);
  181.          * ?>
  182.          * </code>
  183.          * 
  184.          * @access public
  185.          * @param string $query query string
  186.          * @return int the ID generated for an AUTO_INCREMENT column by the previous INSERT query
  187.          *  or 0 if the previous query does not generate an AUTO_INCREMENT value
  188.          * @throws miDBException
  189.          */
  190.         public function execSQLInsert($query)
  191.         {
  192.             $link $this->pconnect();
  193.             $result sql_query($query$link);
  194.             if ($result === false{
  195.                 throw new miDBException(sql_error($link)miDBException::EXCEPTION_QUERYsql_errno($link)$query);
  196.             }
  197.             
  198.             $result sql_insert_id($link);
  199.             if ($result === false{
  200.                 throw new miDBException(sql_error($link)miDBException::EXCEPTION_QUERYsql_errno($link)$query);
  201.             }
  202.             return $result;
  203.         }
  204.         
  205.         
  206.         /**
  207.          * Returns an array with associative arrays from the result
  208.          * 
  209.          * Example:
  210.          * <code>
  211.          * <?php
  212.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  213.          * $DBUtilImpl->pconnect();
  214.          * $rows = $DBUtilImpl->execSelect($query)
  215.          * ?>
  216.          * </code>
  217.          * 
  218.          * @access public
  219.          * @param string $query query string
  220.          * @param array $params positional query params (optional)
  221.          * @return array array with associative arrays from the result
  222.          * @throws miDBException
  223.          */
  224.         public function execSelect($query$params array())
  225.         {
  226.             $rows array();
  227.             $result $this->execSQL($query$params);
  228.             
  229.             while ($row sql_fetch_assoc($result)) {
  230.                 $rows[$row;
  231.             }
  232.             if (sql_free_result($result=== false{
  233.                 throw new miDBException(sql_error($this->_link)miDBException::EXCEPTION_QUERYsql_errno($this->_link)$query);
  234.             }
  235.             
  236.             return $rows;
  237.         }
  238.         
  239.         
  240.         /**
  241.          * Executes the select query and also returns the selected column names in the $fieldsArray
  242.          * 
  243.          * Example:
  244.          * <code>
  245.          * <?php
  246.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  247.          * $DBUtilImpl->pconnect();
  248.          * $rows = $DBUtilImpl->execSelectAndGetFields($query, $fieldsArray);
  249.          * ?>
  250.          * </code>
  251.          * 
  252.          * @access public
  253.          * @param string $query query string
  254.          * @param array $fieldsArray array for names of the fields
  255.          * @return array array with associative arrays from the result
  256.          * @throws miDBException
  257.          */
  258.         public function execSelectAndGetFields($query&$fieldsArray)
  259.         {
  260.             $rows array();
  261.             $result $this->execSQL($query);
  262.  
  263.             while ($row sql_fetch_assoc($result)) {
  264.                 $rows[$row;
  265.             }
  266.             $num_fields sql_num_fields($result);
  267.             if ($num_fields === false)
  268.                 throw new miDBException(sql_error($this->_link)miDBException::EXCEPTION_QUERYsql_errno($this->_link)$query);
  269.             
  270.             for ($i 0$i $num_fields$i++{
  271.                 $fieldsArray[sql_field_name($result$i);
  272.             }
  273.             
  274.             if (sql_free_result($result=== false{
  275.                 throw new miDBException(sql_error($this->_link)miDBException::EXCEPTION_QUERYsql_errno($this->_link)$query);
  276.             }
  277.             return $rows;
  278.         }
  279.         
  280.         
  281.         /**
  282.          * Executes a SQL insert query from an associative array.
  283.          * 
  284.          * Associative array is representing one record where keys
  285.          * are the table fields names.
  286.          * Example:
  287.          * <code>
  288.          * <?php
  289.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  290.          * $DBUtilImpl->pconnect();
  291.          * //$values is an associative array with data for inserting
  292.          * $DBUtilImpl->execInsert($table, $values);
  293.          * ?>
  294.          * </code>
  295.          * 
  296.          * @access public
  297.          * @param string $table table name
  298.          * @param array $values associative arrays with data for inserting
  299.          * @return int the ID generated for an AUTO_INCREMENT column by the previous INSERT query
  300.          *  or 0 if the previous query does not generate an AUTO_INCREMENT value
  301.          * @throws miDBException
  302.          */
  303.         public function execInsert($table$values)
  304.         {
  305.             foreach ($values as $key => $value{
  306.                 if ($value === null)
  307.                     $values[$key'NULL';
  308.                 else
  309.                     $values[$key'"' sql_escape_string($value'"';
  310.             }
  311.             
  312.             $query 'INSERT INTO ' $table '(';
  313.             $query .= implode(','array_keys($values));
  314.             $query .= ') VALUES(';
  315.             $query .= implode(','array_values($values));
  316.             $query .= ')';
  317.             
  318.             return $this->execSQLInsert($query);
  319.         }
  320.         
  321.         
  322.         /**
  323.          * Executes a SQL update query from an array for a specify record key
  324.          * 
  325.          * Example:
  326.          * <code>
  327.          * <?php
  328.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  329.          * $DBUtilImpl->pconnect();
  330.          * $DBUtilImpl->execUpdate($table, $values, $key, $keyval);
  331.          * ?>
  332.          * </code>
  333.          * 
  334.          * @access public
  335.          * @param string $table database table name
  336.          * @param array $values associative arrays with data for updating
  337.          * @param string $key name of the key field
  338.          * @param int $keyval value of the key field
  339.          * @return void 
  340.          * @throws miDBException
  341.          */
  342.         public function execUpdate($table$values$key$keyval)
  343.         {
  344.             $data array();
  345.             foreach ($values as $field => $fieldValue{
  346.                 if ($fieldValue === null)
  347.                     $data[$field '=NULL';
  348.                 else
  349.                     $data[$field '="' sql_escape_string($fieldValue'"';
  350.             }
  351.  
  352.             $query 'UPDATE ' $table ' SET ';
  353.             $query .= implode(','$data);
  354.             if (is_array($key)) {
  355.                 $keysArray array();
  356.                 foreach ($key as $keyId => $keyName)
  357.                     $keysArray[$keyName '="' sql_escape_string($keyval[$keyId]'"';
  358.                 $query .= ' WHERE ' implode(' AND '$keysArray);
  359.             else
  360.                 $query .= ' WHERE ' $key '="' sql_escape_string($keyval'"';
  361.             
  362.             $this->execSQL($query);
  363.         }
  364.         
  365.         
  366.         /**
  367.          * Executes a SQL delete query for a specify record key
  368.          * 
  369.          * Example:
  370.          * <code>
  371.          * <?php
  372.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  373.          * $DBUtilImpl->pconnect();
  374.          * $DBUtilImpl->execDelete($table, $key, $keyval);
  375.          * ?>
  376.          * </code>
  377.          * 
  378.          * @access public
  379.          * @param string $table database table name
  380.          * @param string $key name of the key field
  381.          * @param int $keyval value of the key field
  382.          * @return void 
  383.          * @throws miDBException
  384.          */
  385.         public function execDelete($table$key$keyval)
  386.         {
  387.             $query 'DELETE FROM ' $table;
  388.             if (is_array($key)) {
  389.                 $keysArray array();
  390.                 foreach ($key as $keyId => $keyName)
  391.                     $keysArray[$keyName '="' sql_escape_string($keyval[$keyId]'"';
  392.                 $query .= ' WHERE ' implode(' AND '$keysArray);
  393.             else
  394.                 $query .= ' WHERE ' $key '="' sql_escape_string($keyval'"';
  395.             $this->execSQL($query);
  396.         }
  397.         
  398.         
  399.         /**
  400.          * Returns an array with names of the fields in the specified table.
  401.          * 
  402.          * Example:
  403.          * <code>
  404.          * <?php
  405.          * $DBUtilImpl = new miDBUtilImpl($dbHost, $dbUser, $dbPass, $dbName);
  406.          * $DBUtilImpl->pconnect();
  407.          * $fieldsArray = $DBUtilImpl->getTableFields($tableName);
  408.          * ?>
  409.          * </code>
  410.          * 
  411.          * @access public
  412.          * @param string $table database table name
  413.          * @return array array with names of the fields
  414.          * @throws miDBException
  415.          */
  416.         public function &getTableFields($table)
  417.         {
  418.             $fieldsArray array();
  419.             $link $this->pconnect();
  420.  
  421.             $fields sql_list_fields($this->_dbName$table$link);
  422.             if ($fields === false)
  423.                 throw new miDBException(sql_error($link)miDBException::EXCEPTION_QUERYsql_errno($link));
  424.             $columns sql_num_fields($fields);
  425.             if ($columns === false)
  426.                 throw new miDBException(sql_error($link)miDBException::EXCEPTION_QUERYsql_errno($link));
  427.             
  428.             for ($i 0$i $columns$i++{
  429.                 $fieldsArray[sql_field_name($fields$i);
  430.             }
  431.             return $fieldsArray;
  432.         }
  433.     }
  434. ?>

Documentation generated on Thu, 08 May 2008 16:57:23 +0300 by phpDocumentor 1.4.1