summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2004-07-20 00:33:21 +0000
committerIlia Alshanetsky <iliaa@php.net>2004-07-20 00:33:21 +0000
commit0d085b253fd6807ea18ecac14a993ad265c3b9d9 (patch)
treea49aa29d647f6d82f15d32c8edda8e513b170143
parent15b67145955c8f8a4a41f97b897bcd3c8019273e (diff)
downloadphp-git-0d085b253fd6807ea18ecac14a993ad265c3b9d9.tar.gz
Allow pgsql driver to accept login & password as separate parameters like
other PDO drivers can.
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 063c34ed61..c1e4f5f7af 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -297,6 +297,7 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
{
pdo_pgsql_db_handle *H;
int ret = 0;
+ char *conn_str;
H = pecalloc(1, sizeof(pdo_pgsql_db_handle), dbh->is_persistent);
dbh->driver_data = H;
@@ -304,7 +305,22 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
H->einfo.errcode = 0;
H->einfo.errmsg = NULL;
- H->server = PQconnectdb(dbh->data_source);
+ /* support both full connection string & connection string + login and/or password */
+ if (!dbh->username || !dbh->password) {
+ conn_str = (char *) dbh->data_source;
+ } else if (dbh->username && dbh->password) {
+ spprintf(&conn_str, 0, "%s;user=%s;password=%s", dbh->data_source, dbh->username, dbh->password);
+ } else if (dbh->username) {
+ spprintf(&conn_str, 0, "%s;user=%s", dbh->data_source, dbh->username);
+ } else {
+ spprintf(&conn_str, 0, "%s;password=%s", dbh->data_source, dbh->password);
+ }
+
+ H->server = PQconnectdb(dbh->data_source);
+
+ if (conn_str != dbh->data_source) {
+ efree(conn_str);
+ }
if (PQstatus(H->server) != CONNECTION_OK) {
pdo_pgsql_error(dbh, PGRES_FATAL_ERROR);