ssb Tue Jan 30 00:34:56 2001 EDT
Modified files:
/php4/pear DB.php
/php4/pear/DB/tests db_parsedsn.phpt
Log:
@Allow url encoding in DB usernames and passwords (Stig, PEAR)
Index: php4/pear/DB.php
diff -u php4/pear/DB.php:1.44 php4/pear/DB.php:1.45
--- php4/pear/DB.php:1.44 Fri Jan 26 12:07:22 2001
+++ php4/pear/DB.php Tue Jan 30 00:34:55 2001
@@ -17,7 +17,7 @@
// | |
// +----------------------------------------------------------------------+
//
-// $Id: DB.php,v 1.44 2001/01/26 20:07:22 chagenbu Exp $
+// $Id: DB.php,v 1.45 2001/01/30 08:34:55 ssb Exp $
//
// Database independent query interface.
//
@@ -55,6 +55,7 @@
define("DB_ERROR_NEED_MORE_DATA", -20);
define("DB_ERROR_NOT_LOCKED", -21);
define("DB_ERROR_VALUE_COUNT_ON_ROW", -22);
+define("DB_ERROR_INVALID_DSN", -23);
/*
* Warnings are not detected as errors by DB::isError(), and are not
@@ -171,8 +172,8 @@
{
@include_once("DB/${type}.php");
- $classname = "DB_" . $type;
- $obj = @new $classname;
+ $classname = "DB_${type}";
+ @$obj =& new $classname;
if (!$obj) {
return new DB_Error(DB_ERROR_NOT_FOUND);
@@ -188,39 +189,50 @@
* method for a description of the dsn format. Can also be
* specified as an array of the format returned by DB::parseDSN.
*
- * @param $persistent bool whether this connection should be
- * persistent. Ignored if the backend extension does not support
- * persistent connections.
+ * @param $options mixed if boolean (or scalar), tells whether
+ * this connection should be persistent (for backends that support
+ * this). This parameter can also be an array of options, see
+ * DB_common::setOption for more information on connection
+ * options.
*
* @return object a newly created DB object, or a DB error code on
* error
*
* @see DB::parseDSN
*/
- function &connect($dsn, $persistent = false)
+ function &connect($dsn, $options = false)
{
- if (is_array($dsn)) {
- $dsninfo = $dsn;
- } else {
- $dsninfo = DB::parseDSN($dsn);
- }
- $type = $dsninfo["phptype"];
- $classname = "DB_" . $type;
+ if (is_array($dsn)) {
+ $dsninfo = $dsn;
+ } else {
+ $dsninfo = DB::parseDSN($dsn);
+ }
+ $type = $dsninfo["phptype"];
- @include_once("DB/${type}.php");
- $obj = @new $classname;
+ $classname = "DB_${type}";
+ @$obj =& new $classname;
- if (!$obj) {
- return new DB_Error(DB_ERROR_NOT_FOUND);
- }
+ if (!$obj) {
+ return new DB_Error(DB_ERROR_NOT_FOUND);
+ }
- $err = $obj->connect($dsninfo, $persistent);
+ if (is_array($options)) {
+ foreach ($persistent as $option => $value) {
+ $test = $obj->setOption($option, $value);
+ if (DB::isError($test)) {
+ return $test;
+ }
+ }
+ } else {
+ $obj->setOption('persistent', $persistent);
+ }
+ $err = $obj->connect($dsninfo, $obj->getOption('persistent'));
- if (DB::isError($err)) {
- return $err;
- }
+ if (DB::isError($err)) {
+ return $err;
+ }
- return $obj;
+ return $obj;
}
/**
@@ -402,11 +414,11 @@
}
if (preg_match("|^([^:]+):([^@]+)@?(.*)$|", $dsn, $arr)) {
- $parsed["username"] = $arr[1];
- $parsed["password"] = $arr[2];
+ $parsed["username"] = urldecode($arr[1]);
+ $parsed["password"] = urldecode($arr[2]);
$dsn = $arr[3];
} elseif (preg_match("|^([^:]+)@(.*)$|", $dsn, $arr)) {
- $parsed["username"] = $arr[1];
+ $parsed["username"] = urldecode($arr[1]);
$dsn = $arr[2];
}
@@ -426,6 +438,29 @@
}
return $parsed;
+ }
+
+ /**
+ * Load a PHP database extension if it is not loaded already.
+ *
+ * @access public
+ *
+ * @param $name the base name of the extension (without the .so or
+ * .dll suffix)
+ *
+ * @return bool true if the extension was already or successfully
+ * loaded, false if it could not be loaded
+ */
+ function assertExtension($name)
+ {
+ if (!extension_loaded($name)) {
+ $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
+ @dl($name . $dlext);
+ }
+ if (!extension_loaded($name)) {
+ return false;
+ }
+ return true;
}
}
Index: php4/pear/DB/tests/db_parsedsn.phpt
diff -u php4/pear/DB/tests/db_parsedsn.phpt:1.1 php4/pear/DB/tests/db_parsedsn.phpt:1.2
--- php4/pear/DB/tests/db_parsedsn.phpt:1.1 Fri Sep 8 19:39:56 2000
+++ php4/pear/DB/tests/db_parsedsn.phpt Tue Jan 30 00:34:55 2001
@@ -22,6 +22,7 @@
test("mysql://testuser:testpw");
test("oci8://user:pass@tns-name");
test("odbc(solid)://foo:bar@tcp+localhost+1313");
+test("ibase://user%40domain:password@database");
/* phptype,dbsyntax,protocol,hostspec,database,username,password */
?>
@@ -36,3 +37,4 @@
mysql,mysql,,,,testuser,testpw
oci8,oci8,,tns-name,,user,pass
odbc,solid,tcp,localhost 1313,,foo,bar
+ibase,ibase,,database,,user@domain,password
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]