php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #23720 DB::Connect does not accept string for $dsn when using pgsql
Submitted: 2003-05-20 10:01 UTC Modified: 2003-05-20 10:44 UTC
From: brian at onlineinfo dot net Assigned: lsmith (profile)
Status: Closed Package: PEAR related
PHP Version: 4.3.1 OS: Debian, Solaris
Private report: No CVE-ID: None
 [2003-05-20 10:01 UTC] brian at onlineinfo dot net
When passing a valid DSN to DB::Connect and connecting to pgsql, DB_Pgsql expects the dsn to be an array instead of a string.  The result is a broken connect string since PHP will happily treat the string as an array.  The solution is to replace:

$this->dsn = $dsninfo;

with:

if (is_array($dsninfo)) {
    $this->dsn = $dsninfo;
} else {
    $this->dsn = $dsninfo = DB::parseDSN($dsninfo);
}

in the connect method of DB/pgsql.php.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-05-20 10:12 UTC] lsmith@php.net
Are you trying to switch the dsn after object creation with the factory method? This feature is not supported as far as I know.

DB_pgsql::connect() should not be called by the user.
 [2003-05-20 10:23 UTC] brian at onlineinfo dot net
Here is the connect code we are using:

    $db = DB::factory('pgsql_ex');
    if (DB::isError($db)) return $db;
    $connect = $db->Connect($dsn, $persistent = TRUE);
    if (DB::isError($connect)) return $connect;
    $db->setFetchMode(DB_FETCHMODE_ASSOC);
    $db->setOption('seqname_format','%s');
    return $db;

(pgsql_ex is a small class extending DB_pgsql that adds a metadata method)
 [2003-05-20 10:44 UTC] lsmith@php.net
this is the expected behavior. You should be able to use DB::connect() with your custom class, which handles string dsn and options for convinience. 
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Thu Dec 02 13:03:33 2021 UTC