summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStig Bakken <ssb@php.net>1999-12-12 15:55:56 +0000
committerStig Bakken <ssb@php.net>1999-12-12 15:55:56 +0000
commitf30278b96b25c630ec89ba8cc0bec259eb5b9ed8 (patch)
tree5ef0766288af1035ffaf7ccc79552d007d2bf759
parent1627a57d968c4c1c76a33019516a1524d083d14a (diff)
downloadphp-git-f30278b96b25c630ec89ba8cc0bec259eb5b9ed8.tar.gz
- Documented classes, methods and constants in the source
- Defined DB_ERROR_NOSUCHTABLE and DB_ERROR_NOSUCHFIELD - Renamed DB_common::capableOf to DB_common::provides - Cleaned up the error code mapping - Added simpleQuery method in DB_mysql - Changed getXxx methods in DB_common to use simpleQuery - Fixed bug in DB_common::getAssoc
-rw-r--r--pear/DB.php119
1 files changed, 97 insertions, 22 deletions
diff --git a/pear/DB.php b/pear/DB.php
index 814f389b8f..79f2d394e3 100644
--- a/pear/DB.php
+++ b/pear/DB.php
@@ -17,11 +17,20 @@
// | |
// +----------------------------------------------------------------------+
//
+// $Id$
+//
// Database independent query interface.
//
// {{{ Database independent error codes.
+/*
+ * The method mapErrorCode in each DB_dbtype implementation maps
+ * native error codes to one of these.
+ *
+ * If you add an error code here, make sure you also add a textual
+ * version of it in DB::errorMessage().
+ */
define("DB_OK", 0);
define("DB_ERROR", -1);
define("DB_ERROR_SYNTAX", -2);
@@ -40,39 +49,80 @@ define("DB_ERROR_NODBSELECTED", -14);
define("DB_ERROR_CANNOT_CREATE", -15);
define("DB_ERROR_CANNOT_DELETE", -16);
define("DB_ERROR_CANNOT_DROP", -17);
+define("DB_ERROR_NOSUCHTABLE", -18);
+define("DB_ERROR_NOSUCHFIELD", -19);
// }}}
// {{{ Prepare/execute parameter types
+/*
+ * These constants are used when storing information about prepared
+ * statements (using the "prepare" method in DB_dbtype).
+ *
+ * The prepare/execute model in DB is borrowed from the ODBC extension,
+ * in a query the "?" character means a scalar parameter, and a "*"
+ * character means an opaque parameter. An opaque parameter is simply
+ * a file name, the real data are in that file (useful for large blob
+ * operations).
+ */
define("DB_PARAM_SCALAR", 1);
define("DB_PARAM_OPAQUE", 2);
// }}}
// {{{ Binary data modes
+/*
+ * These constants define different ways of returning binary data
+ * from queries. Again, this model has been borrowed from the ODBC
+ * extension.
+ *
+ * DB_BINMODE_PASSTHRU sends the data directly through to the browser
+ * when data is fetched from the database.
+ * DB_BINMODE_RETURN lets you return data as usual.
+ * DB_BINMODE_CONVERT returns data as well, only it is converted to
+ * hex format, for example the string "123" would become "313233".
+ */
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".
+ * The main "DB" class is simply a container class with some static
+ * methods for creating DB objects as well as some utility functions
+ * common to all parts of DB.
*
- * @version 100
+ * The object model of DB is as follows (indentation means inheritance):
+ *
+ * DB The main DB class. This is simply a utility class
+ * with some "static" methods for creating DB objects as
+ * well as common utility functions for other DB classes.
+ *
+ * DB_common The base for each DB implementation. Provides default
+ * | implementations (some would say virtual methods) for
+ * | the actual DB implementations as well as a bunch of
+ * | query utility functions.
+ * |
+ * +-DB_mysql The DB implementation for MySQL. Inherits DB_common.
+ * When calling DB::factory or DB::connect for MySQL
+ * connections, the object returned is an instance of this
+ * class.
+ *
+ * @version 1.00
* @author Stig Bakken <ssb@fast.no>
- * @since 4.0b4
+ * @since PHP 4.0
*/
class DB {
// {{{ factory()
/**
* 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
+ *
+ * @return object a newly created DB object, or a DB error code on
+ * error
*/
function factory($type) {
global $USED_PACKAGES;
@@ -93,6 +143,19 @@ class DB {
// }}}
// {{{ connect()
+ /**
+ * Create a new DB object and connect to the specified database.
+ *
+ * @param $dsn "data source name", see the parseDSN method for a
+ * description of the dsn format.
+ *
+ * @param $persistent (optional) whether this connection should be
+ * persistent. Ignored if the backend extension does not support
+ * persistent connections.
+ *
+ * @return object a newly created DB object, or a DB error code on
+ * error
+ */
function connect($dsn, $persistent = false) {
global $USED_PACKAGES;
@@ -109,7 +172,10 @@ class DB {
}
$classname = 'DB_' . $type;
$obj = new $classname;
- $obj->connect(&$dsninfo, $persistent);
+ $err = $obj->connect(&$dsninfo, $persistent);
+ if (DB::isError($err)) {
+ return $err;
+ }
return $obj; // XXX ADDREF
}
@@ -118,10 +184,11 @@ class DB {
/**
* Return the DB API version.
- * @return int the DB API version number
+ *
+ * @return double the DB API version number
*/
function apiVersion() {
- return 100;
+ return 1.00;
}
// }}}
@@ -129,8 +196,10 @@ class DB {
/**
* Tell whether a result code from a DB method is an error.
- * @param $code result code
- * @return bool whether $code is an error
+ *
+ * @param $code result code
+ *
+ * @return bool whether $code is an error
*/
function isError($code) {
return is_int($code) && ($code < 0);
@@ -140,9 +209,12 @@ class DB {
// {{{ errorMessage()
/**
- * Return a textual error message for an error code.
- * @param $code error code
- * @return string error message
+ * Return a textual error message for a DB error code.
+ *
+ * @param $code error code
+ *
+ * @return string error message, or false if the error code was
+ * not recognized
*/
function errorMessage($code) {
if (!is_array($errorMessages)) {
@@ -160,7 +232,12 @@ class DB {
DB_ERROR_INVALID_NUMBER => "invalid number",
DB_ERROR_INVALID_DATE => "invalid date or time",
DB_ERROR_DIVZERO => "division by zero",
- DB_ERROR_NODBSELECTED => "no database selected"
+ DB_ERROR_NODBSELECTED => "no database selected",
+ DB_ERROR_CANNOT_CREATE => "can not create",
+ DB_ERROR_CANNOT_DELETE => "can not delete",
+ DB_ERROR_CANNOT_DROP => "can not drop",
+ DB_ERROR_NOSUCHTABLE => "no such table",
+ DB_ERROR_NOSUCHFIELD => "no such field"
);
}
return $errorMessages[$code];
@@ -260,18 +337,18 @@ class DB {
// }}}
}
-// }}}
-// {{{ 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 {
+ // {{{ properties
+
var $dbh;
var $result;
+ // }}}
// {{{ DB_result()
/**
@@ -324,7 +401,7 @@ class DB_result {
// {{{ free()
/**
- * Frees the resource for this result and reset ourselves.
+ * Frees the resources allocated for this result set.
* @return int error code
*/
function free() {
@@ -339,8 +416,6 @@ class DB_result {
// }}}
}
-// }}}
-
// Local variables:
// tab-width: 4
// c-basic-offset: 4