diff options
Diffstat (limited to 'pear/DB.php')
| -rw-r--r-- | pear/DB.php | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/pear/DB.php b/pear/DB.php new file mode 100644 index 0000000000..cab6b7a4d3 --- /dev/null +++ b/pear/DB.php @@ -0,0 +1,190 @@ +<?php +// +// +----------------------------------------------------------------------+ +// | PHP version 4.0 | +// +----------------------------------------------------------------------+ +// | Copyright (c) 1997, 1998, 1999 The PHP Group | +// +----------------------------------------------------------------------+ +// | This source file is subject to version 2.0 of the PHP license, | +// | that is bundled with this package in the file LICENSE, and is | +// | available at through the world-wide-web at | +// | http://www.php.net/license/2_0.txt. | +// | If you did not receive a copy of the PHP license and are unable to | +// | obtain it through the world-wide-web, please send a note to | +// | license@php.net so we can mail you a copy immediately. | +// +----------------------------------------------------------------------+ +// | Authors: Stig Bakken <ssb@fast.no> | +// | | +// +----------------------------------------------------------------------+ +// +// Database independent query interface. +// + +// {{{ Database independent error codes. + +define("DB_OK", 0); +define("DB_ERROR", -1); +define("DB_ERROR_SYNTAX", -2); +define("DB_ERROR_CONSTRAINT", -3); +define("DB_ERROR_NOT_FOUND", -4); +define("DB_ERROR_ALREADY_EXISTS", -5); +define("DB_ERROR_UNSUPPORTED", -6); +define("DB_ERROR_MISMATCH", -7); +define("DB_ERROR_INVALID", -8); +define("DB_ERROR_NOT_CAPABLE", -9); +define("DB_ERROR_TRUNCATED", -10); +define("DB_ERROR_INVALID_NUMBER", -11); +define("DB_ERROR_INVALID_DATE", -12); +define("DB_ERROR_DIVZERO", -13); + +// }}} +// {{{ Prepare/execute parameter types + +define("DB_PARAM_SCALAR", 1); +define("DB_PARAM_OPAQUE", 2); + +// }}} +// {{{ Binary data modes + +define("DB_BINMODE_PASSTHRU", 1); +define("DB_BINMODE_RETURN", 2); +define("DB_BINMODE_CONVERT", 3); + +// }}} + +// {{{ class DB + +/** + * This class implements a factory method for creating DB objects, + * as well as some "static methods". + * + * @version 100 + * @author Stig Bakken <ssb@fast.no> + * @since 4.0b4 + */ +class DB { + /** + * Create a new DB object for the specified database type. + * @param $type database type + * @return object a newly created DB object, or false on error + */ + function factory($type) { + global $USED_PACKAGES; + // "include" should be replaced with "use" once PHP gets it + $pkgname = 'DB/' . $type; + if (!is_array($USED_PACKAGES) || !$USED_PACKAGES[$pkgname]) { + if (!@include("DB/${type}.php")) { + return DB_ERROR_NOT_FOUND; + } else { + $USED_PACKAGES[$pkgname] = true; + } + } + $classname = 'DB_' . $type; + $obj = new $classname; + return $obj; + } + + /** + * Return the DB API version. + * @return int the DB API version number + */ + function apiVersion() { + return 100; + } + + /** + * Tell whether a result code from a DB method is an error. + * @param $code result code + * @return bool whether $code is an error + */ + function isError($code) { + return is_int($code) && ($code < 0); + } + + /** + * Return a textual error message for an error code. + * @param $code error code + * @return string error message + */ + function errorMessage($code) { + if (!is_array($errorMessages)) { + $errorMessages = array( + DB_OK => "no error", + DB_ERROR => "unknown error", + DB_ERROR_SYNTAX => "syntax error", + DB_ERROR_CONSTRAINT => "constraint violation", + DB_ERROR_NOT_FOUND => "not found", + DB_ERROR_ALREADY_EXISTS => "already exists", + DB_ERROR_UNSUPPORTED => "not supported", + DB_ERROR_MISMATCH => "mismatch", + DB_ERROR_INVALID => "invalid", + DB_ERROR_NOT_CAPABLE => "DB implementation not capable", + DB_ERROR_INVALID_NUMBER => "invalid number", + DB_ERROR_INVALID_DATE => "invalid date or time", + DB_ERROR_DIVZERO => "division by zero" + ); + } + return $errorMessages[$code]; + } +} + +// }}} +// {{{ class DB_result + +/** + * This class implements a wrapper for a DB result set. + * A new instance of this class will be returned by the DB implementation + * after processing a query that returns data. + */ +class DB_result { + var $dbh; + var $result; + + /** + * DB_result constructor. + * @param $dbh DB object reference + * @param $result result resource id + */ + function DB_result($dbh, $result) { + $this->dbh = $dbh; + $this->result = $result; + } + + /** + * Fetch and return a row of data. + * @return array a row of data, or false on error + */ + function fetchRow() { + return $this->dbh->fetchRow($this->result); + } + + /** + * Fetch a row of data into an existing array. + * @param $arr reference to data array + * @return int error code + */ + function fetchInto(const $arr) { + return $this->dbh->fetchInto($this->result, &$arr); + } + + /** + * Frees the resource for this result and reset ourselves. + * @return int error code + */ + function free() { + $err = $this->dbh->freeResult($this->result); + if (DB::isError($err)) { + return $err; + } + $this->dbh = $this->result = false; + return true; + } +} + +// }}} + +// Local variables: +// tab-width: 4 +// c-basic-offset: 4 +// End: +?> |
