home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / DB / ibase.php < prev    next >
PHP Script  |  2001-02-19  |  5KB  |  205 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4.0                                                      |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2001 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Sterling Hughes <sterling@php.net>                          |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: ibase.php,v 1.17 2001/02/19 12:22:26 ssb Exp $
  20. //
  21. // Database independent query interface definition for PHP's Interbase
  22. // extension.
  23. //
  24.  
  25. require_once 'DB/common.php';
  26.  
  27. class DB_ibase extends DB_common
  28. {
  29.     var $connection;
  30.     var $phptype, $dbsyntax;
  31.     var $autocommit = 1;
  32.     var $manip_query = array();
  33.  
  34.     function DB_ibase()
  35.     {
  36.         $this->DB_common();
  37.         $this->phptype = 'ibase';
  38.         $this->dbsyntax = 'ibase';
  39.         $this->features = array(
  40.             'prepare' => true,
  41.             'pconnect' => true,
  42.             'transactions' => true
  43.         );
  44.     }
  45.  
  46.     function connect($dsn, $persistant = false)
  47.     {
  48.         if(is_array($dsn)) {
  49.             $dsninfo = &$dsn;
  50.         } else {
  51.             $dsninfo = DB::parseDSN($dsn);
  52.         }
  53.         if (!$dsninfo || !$dsninfo['phptype']) {
  54.             return $this->raiseError("invalid data source name"); 
  55.         }
  56.         $this->dsn = $dsninfo;
  57.         $user = $dsninfo['username'];
  58.         $pw = $dsninfo['password'];
  59.         $dbhost = $dsninfo['hostspec'] ? 
  60.                   ($dsninfo['hostspec'] . ':/' . $dsninfo['database']) : 
  61.                   $dsninfo['database'];
  62.         $connect_function = $persistent ? 'ibase_pconnect' : 'ibase_connect';
  63.         if ($dbhost && $user && $pw) {
  64.             $conn = $connect_function($dbhost, $user, $pw);
  65.         } elseif ($dbhost && $user) {
  66.             $conn = $connect_function($dbhost, $user);
  67.         } elseif ($dbhost) {
  68.             $conn = $connect_function($dbhost);
  69.         } else {
  70.             return $this->raiseError("no host, user or password");
  71.         }
  72.         $this->connection = $conn;
  73.         return DB_OK;
  74.     }
  75.  
  76.     function disconnect()
  77.     {
  78.         return @ibase_close($this->connection);
  79.     }
  80.  
  81.     function simpleQuery($query)
  82.     {
  83.         $this->last_query = $query;
  84.         $query = $this->modifyQuery($query);
  85.         $result = @ibase_query($this->connection, $query);
  86.         if (!$result) {
  87.             return $this->raiseError();
  88.         }
  89.         if ($this->autocommit) {
  90.             ibase_commit($this->connection);
  91.         }
  92.         // Determine which queries that should return data, and which
  93.         // should return an error code only.
  94.         return DB::isManip($query) ? DB_OK : $result;
  95.     }
  96.  
  97.     function &fetchRow($result, $fetchmode=DB_FETCHMODE_DEFAULT)
  98.     {
  99.     if ($fetchmode == DB_FETCHMODE_DEFAULT) {
  100.         $fetchmode = $this->fetchmode;
  101.     }
  102.     if ($fetchmode & DB_FETCHMODE_ASSOC) {
  103.         $row = (array)ibase_fetch_object($result);
  104.     } else {
  105.         $row = ibase_fetch_row($result);
  106.     }
  107.     if (!$row) {
  108.         if ($errmsg = ibase_errmsg()) {
  109.         return $this->raiseError($errmsg);
  110.         } else {
  111.         return null;
  112.         }
  113.     }
  114.     
  115.     return $row;
  116.     }
  117.     
  118.     function fetchInto($result, &$ar, $fetchmode=DB_FETCHMODE_DEFAULT)
  119.     {
  120.         if ($fetchmode == DB_FETCHMODE_DEFAULT) {
  121.             $fetchmode = $this->fetchmode;
  122.         }
  123.         if ($fetchmode & DB_FETCHMODE_ASSOC) {
  124.             return $this->raiseError(DB_ERROR_NOT_CAPABLE);
  125.         } else {
  126.             $ar = ibase_fetch_row($result);
  127.         }
  128.         if (!$ar) {
  129.             return $this->raiseError();
  130.         }
  131.         return DB_OK;
  132.     }
  133.  
  134.     function freeResult()
  135.     {
  136.         return $this->raiseError(DB_ERROR_NOT_CAPABLE);
  137.     }
  138.  
  139.     function freeQuery($query)
  140.     {
  141.         ibase_free_query($query);
  142.         return true;
  143.     } 
  144.  
  145.     function numCols($result)
  146.     {
  147.         $cols = ibase_num_fields($result);
  148.         if (!$cols) {
  149.             return $this->raiseError();
  150.         }
  151.         return $cols;
  152.     }
  153.  
  154.     function prepare($query)
  155.     {
  156.         $this->last_query = $query;
  157.         $query = $this->modifyQuery($query);
  158.         $stmt = ibase_prepare($query);
  159.         $this->manip_query[(int)$stmt] = DB::isManip($query);
  160.         return $stmt;
  161.     }
  162.  
  163.     function execute($stmt, $data = false)
  164.     {
  165.         $result = ibase_execute($stmt, $data);
  166.         if (!$result) {
  167.             return $this->raiseError();
  168.         }
  169.         if ($this->autocommit) {
  170.             ibase_commit($this->connection);
  171.         }
  172.         return DB::isManip($this->manip_query[(int)$stmt]) ? DB_OK : $result;
  173.     }
  174.  
  175.     function autoCommit($onoff = false)
  176.     {
  177.         $this->autocommit = $onoff ? 1 : 0;
  178.         return DB_OK;
  179.     }
  180.  
  181.     function commit()
  182.     {
  183.         return ibase_commit($this->connection);
  184.     }
  185.  
  186.     function rollback($trans_number)
  187.     {
  188.         return ibase_rollback($this->connection, $trans_number);
  189.     }
  190.  
  191.     function transactionInit($trans_args = 0)
  192.     {
  193.         return $trans_args ? ibase_trans($trans_args, $this->connection) : ibase_trans();
  194.     }
  195. }
  196.  
  197. /*
  198.  * Local variables:
  199.  * tab-width: 4
  200.  * c-basic-offset: 4
  201.  * End:
  202.  */
  203.  
  204. ?>
  205.