downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

pg_connection_busy> <pg_close
[edit] Last updated: Fri, 23 Mar 2012

view this page in

pg_connect

(PHP 4, PHP 5)

pg_connectOtwiera tymczasowe połączenie do PostgreSQL-a

Opis

resource pg_connect ( string $łąńcuch_połączenia [, int $typ_połączenia ] )

pg_connect() Otwiera tymczasowe połączenie do serwera PostgreSQL określonego przez łąńcuch_połączenia.

Jeśli funkcja pg_connect() zostanie wywołana drugi raz z tym samym łąńcuchem_połączenia jak istniejące połączenie, zostanie zwrócony identyfikator istniejącego połączenia chyba, że podasz PGSQL_CONNECT_FORCE_NEW jako typ_połączenia.

Stara składnia z wieloma parametrami $conn = pg_connect("host", "port", "opcje", "tty", "nazwa_bazy") jest przestarzała.

Parametry

łąńcuch_połączenia

łąńcuch_połączenia może być pusty, użyte zostaą wszystkie domyślne parametry lub może zawierać jeden lub więcej parametrów ustawień oddzielonych przez biały znak. Każdy parametr ustawień jest w postaci słowo_kluczowe = wartość. Odstępy wokół znaku równości są opcjonalne. Aby zapisać pustą wartość lub wartość zawierającą spacje, należy otoczyć ją przez pojedynczy cudzysłów, np. słowo_kluczowe = 'ta wartość'. Pojedyncze cudzysłowy i lewe ukośniki w wartości musza być poprzedzone znakiem unikowym (lewym ukośnikiem) tj. \' i \\

Obecnie rozpoznwane parametry słów kluczowych to: host, hostaddr, port, dbname, user, password, connect_timeout, options, tty (ignorowany), sslmode, requiressl (przestarzały na rzecz sslmode) i service. Które z tych parametrów istnieją zależy od Twojej wersji PostgreSQL.

typ_połączenia

Jeśli jest podany PGSQL_CONNECT_FORCE_NEW, wtedy nowe połączenie jest tworzone, nawet jeśli łąńcuch_połączenia jest identyczny z istniejącym połączeniem.

Zwracane wartości

Zasób, połączenie do bazy PostgreSQL w przypadku powodzenia, lub FALSE gdy zawiedzie.

Przykłady

Przykład #1 Używanie pg_connect

<?php
$dbconn 
pg_connect ("dbname=mary");
//Otwiera połączenie z bazÄ… "mary"

$dbconn2 pg_connect ("host=localhost port=5432 dbname=mary");
//Otwiera połączenie z bazÄ… "mary" na komputerze "localhost" przez port "5432"

$dbconn3 pg_connect ("host=sheep port=5432 dbname=mary user=lamb password=foo");
//Otwiera połączenie z bazÄ… "mary" na komputerze "sheep" z użyciem nazwy użytkownika i hasÅ‚a

$conn_string "host=sheep port=5432 dbname=test user=lamb password=bar";
$dbconn4 pg_connect ($conn_string);
//Otwiera połączenie z bazÄ… "test" na komputerze "sheep" z użyciem nazwy użytkownika i hasÅ‚a
?>

Zobacz też:

  • pg_pconnect() - Otwiera trwaÅ‚e połączenie z serwerem PostgreSQL
  • pg_close() - Zamyka połączenie z PostgreSQL
  • pg_host() - Zwraca nazwÄ™ komputera zwiÄ…zanego z połączeniem
  • pg_port() - Zwraca numer portu zwiÄ…zany z połączeniem
  • pg_tty() - Zwraca nazwÄ™ konsoli tty zwiÄ…zanej z połączeniem
  • pg_options() - Podaje opcje powiÄ…zane z połączenim
  • pg_dbname() - Podaje nazwÄ™ bazy danych



pg_connection_busy> <pg_close
[edit] Last updated: Fri, 23 Mar 2012
 
add a note add a note User Contributed Notes pg_connect
dreamsoundaudio at gmail dot com 03-Sep-2011 01:06
Ubuntu/Debian users, specifically server versions: If you used Tasksel to build PostgreSQL, and you're banging your head against the wall with the "Fatal error: Call to undefined function pg_connect()" error, check that php5-pgsql is installed.

Tasksel apparently doesn't install it.
pedro2009 at mandic dot com dot br 26-Jun-2011 02:55
I had problems in a PHP program that uses fork() after pg_connect(); I didn't use any pg function inside the child, I just keep using pg functions in the parent process.

In this case, the connection gets "duplicated" and when the child finishes, it automatically calls pg_close() on its destructors, and this makes the parent connection to finish!

If your program needs to fork, then use this sequence:
  pg_connect(); do_somethings(); pg_close(); fork(); pg_connect();

And remember: if your program forks, you CAN NOT use the pg_pconnect() function, because it is persistent.
thakur at corexprts dot com 27-Oct-2010 04:45
One thing is to remember, whenever trying to use pg_connect, add the timeout parameter with it

<?php
$d
=pg_connect('host=example.com user=pgsql dbname=postgres connect_timeout=5');
?>
infotirona at yahoo dot com 16-Aug-2010 09:33
It's strange how this "Fatal error: Call to undefined function pg_connect()" happens(when everything else is OK) in PHP version 5.3.3.

I was trying to connect to my db when I got that error message the firs time. My extensions path was OK, pgsql extension  should have been loaded from php.ini(i had enabled it before), Apache started-up without errors, but i still had the "Fatal error: Call to undefined function pg_connect()" message when i tried to connect.
Seaching a bit around i found something about dll libraries not working as they should, so deleted the new 5.3.3 version, downloaded the PHP 5.2.5 and configured it.

I'm using Windows XP Home SP3, Apache 2.2, PHP 5.2.5 and everything works fine now... ;)
kam 09-Jul-2010 10:17
One more note about ssl connection to postgresql. I have a lot of problems with apache memory leaks (debian distro + apache2 + php5), and finally discovered that encrypted connection to postgresql causes those memory leaks.
With 'sslmode=disable' db connection is quickly and needs less memory. So, if you have not a special reason to use encrypted connection, I recommend to set it off.

Thank you, ratio, for your comment.
gutostraube at gmail dot com 02-Oct-2009 09:51
It's possible connect to a PostgreSQL database via Unix socket using the pg_connect() function by the following two ways:

1) Using the socket path:

<?php
$conn
= pg_connect('host=/var/run/postgresql user=username dbname=databasename');
?>

2) Omitting the host name/path:

<?php
$conn
= pg_connect('user=username dbname=databasename');
?>

Note: in this case (omitting the host value), the default socket path will be used.
ratio 28-Aug-2009 06:57
If the configuration parameter "ssl = true" is set in postgres.conf, and a pg_connect() is done without "sslmode=disable", then the connection seems to be established with SSL by default. Enabling SSL in Postgres can cause performance problems with large data transfers (e.g. bytea), because Postgres has a "built-in" native SSL Support, so Postgres has to do all the encryption.
bgalloway at citycarshare dot org 27-Mar-2008 08:33
Beware about writing something like
<?php
function getdb_FAILS() {
    return
pg_connect("...") or die('connection failed');
}
?>

It will return a boolean.  This will appear to be fine if you don't use the return value as a db connection handle, but will fail if you do.

Instead, use:
<?php
function getdb() {
   
$db = pg_connect("...") or die('connection failed');
    return
$db;
}
?>

which actually returns a handle.
tim at buttersideup dot com 28-Dec-2007 12:41
It's not explicitly stated here, but you can also connect to PostgreSQL via a UNIX domain socket by leaving the host empty.  This should have less overhead than using TCP e.g.:

$dbh = new PDO('pgsql:user=exampleuser dbname=exampledb password=examplepass');

In fact as the C library call PQconnectdb underlies this implementation, you can supply anything that this library call would take - the "pgsql:" prefix gets stripped off before PQconnectdb is called, and if you supply any of the optional arguments (e.g. user), then these arguments will be added to the string that you supplied...  Check the docs for your relevant PostgreSQL client library: e.g.

http://www.postgresql.org/docs/8.3/static/libpq-connect.html

If you really want, you can use ';'s to separate your arguments - these will just be converted to spaces before PQconnectdb is called.

Tim.
xourge 20-Aug-2007 12:17
remember that when you use a blank password there will be an error because of:
password= dbname= (...)
to fix this problem use '' in your $options variable
example:

$options = " host='localhost' port='5432' user='postgres' password='' dbname='test' ";
pg_connect($options);

*** careful: I used double ' after password=, not "
Sohel Taslim 02-Aug-2007 10:20
I got the same problem but I have to solve that in different way.
In my postgresql.conf file the following was commented.
So, I active that under Connection Settings-

# - Connection Settings –
tcpip_socket = true
borovik -at- gmail 03-Apr-2007 10:06
"If you use pg_connect('host=localhost port=5432 user=my_username password=my_password dbname=my_dbname') and you get the following error:
"Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host localhost and accepting TCP/IP connections on port 5432?"
"
I solved this error just by setting listen_addresses = '*' in the postgresql.conf file. This error occurs probably despite of a name resolution to localhost, given in the "host" parameter. So you can set the host in the pg_connect() function.
Anonymous 10-Apr-2005 12:51
The values accepted by pg_connect's sslmode argument are: disable, allow, prefer, require
phpnet at benjamin dot schulz dot name 01-Sep-2004 07:28
if you need to open a new connection handle (i.e. for multiple pg_send_query()) use PGSQL_CONNECT_FORCE_NEW as second parameter to pg_connect()
Cybertinus 15-Dec-2003 03:47
If you use pg_connect('host=localhost port=5432 user=my_username password=my_password dbname=my_dbname') and you get the following error:
"Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host localhost and accepting TCP/IP connections on port 5432?"
then you should try to leave the host= and port= parts out of the connection string. This sounds strange, but this is an "option" of Postgre. If you have not activated the TCP/IP port in postgresql.conf then postgresql doesn't accept any incoming requests from an TCP/IP port. If you use host= in your connection string you are going to connect to Postgre via TCP/IP, so that's not going to work. If you leave the host= part out of your connection string you connect to Postgre via the Unix domain sockets, which is faster and more secure, but you can't connect with the database via any other PC as the localhost.
xzilla at users dot sourceforge dot net 09-Dec-2003 10:22
regarding the note from  matias at nospam dot projectcast dot com
on 12-Feb-2002 01:16, you do not need a user in the database with the same name a your web user with ANY version of postgresql.  The only time that would be a requirement ifs if you set your postgresql server to only allow IDENT based authentication  (which IIRC is the default on Red Hat systems, which might be what lead to the confusion).  For more info on the various authentication methods allowed by postgresql, check out http://www.postgresql.org/docs/7.4/static/client-authentication.html
derry at siliconriver.com dot au 07-Aug-2003 11:48
pg_connect seems to support SSL connections, on systems where Postgres has been compiled with ssl, i'm assuming this is since psql uses libpq to connect.
pg_connect can successfully connect, and use the "requiressl" argument.
jtate at php dot net 31-Dec-2002 04:36
If you use host=HOSTNAME in your pg_connect string when connecting to PostgreSQL databases newer than 7.1, you need to make sure that your postmaster daemon is started with the "-i" option.  Otherwise the connection will fail.  See http://www.postgresql.org/idocs/index.php?client-authentication.html for client authentication documentation.
khyri at khyri dot com 31-Oct-2002 06:23
After upgrading to PHP 4.2.3 from PHP 4.1.2 (Red Hat Linux Advanced Server with Stronghold 4.0) in order to manually compile in MHASH support, I discovered that Postgres support has disappeared, despite being specified on the command line, and compiling with no errors.

FATAL: Undefined function: pg_connect()

Confirmed by looking at the output of phpinfo() and comparing it to the output pre-upgrade - no mention of PostgreSQL in the new one.

Detective work led me to find that the old pgsql.so in /usr/lib/php4 was untouched, and the new one had ended up in /usr/lib/20020429 instead.

The fix was to edit config_vars.mk after configuration to change the value of EXTENSION_DIR, and then compile.

Not quite sure where 20020429 came from, looks like a left-over value from development testing...

Anyway, in case any one else has a similar problem, thought I'd document it here, as a problem with pg_connect is where this will first surface as a symptom.
Helio Ferenhof <d-m at eudoramail dot com> 18-Feb-2002 03:20
Connection Hint:
Do you always write at the code the username and password to connect to your PostgreSQL database !?
What if your username or password changes?

Create a connection include file.

---
connection.inc
---
<?php
  $connection
= pg_connect("host=localhost port=5432 dbname=DATABASENAME user=USERNAME password=PASSWORD")
      or die (
"Nao consegui conectar ao PostGres --> " . pg_last_error($conn));
?>

// you can use $database name and pass it from the php file if you connect into different databases.

---
Phpfile.php
---

<?php
   
include('connection.php'); // Include the connection to the databank THEN start your SQL Job :)

   
$result=pg_exec("SELECT field FROM table WHERE field = '$something' "); // Sample of SQL QUERY
       
$fetch = pg_fetch_row($query_st); // Sample of SQL QUERY

   
pg_close($connection); // Close this connection
?>

[]´s
Helio Ferenhof
d-m@eudoramail.com
matias at nospam dot projectcast dot com 12-Feb-2002 03:16
At least with Postgres 7.2, connecting to local postgresdatabase requires a user in the database with the same name as the user running apache, or the connection fails.
rolf at sir-wum dot de 12-Oct-2001 07:54
pg_connect() won't work with the authentication method 'crypt' in the pg_hba.conf. Took me an hour to figure that out till I remeberd some other issues with windows missing the crypt() call.
kayotix at yahoo dot com 15-Sep-2000 01:54
Little note that is buried in the install somewhere.  In Php 3, PostgreSQL support was activated by adding --with-postgresql=[DIR] to the options passed to ./configure.  With Php 4.0.2 (on Linux) the parameter was --with-pgsql.  The only place I found this was in the installing PHP on Unix section of the manual.
leace at post dot cz 21-Jul-2000 04:26
If you use PostgreSQL users for authenticating into your pg database rather than using your own authentication, always specify host directive in pg_connect and edit pg_hba.conf to authenticate from this host accordingly. Otherwise, PHP will connect as 'local' using UNIX domain sockets, which is set in pg_hba.conf to 'trust' by default (so you can connect using psql on console without specifying password) and everyone can connect to db _without password_ .

 
show source | credits | stats | sitemap | contact | advertising | mirror sites