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]