Datenbankabruf mit PHP[gelöst]

Hi Leute!

Ich habe vor zwei Tagen mit PostgreSQL und PHP angefangen. Neben dem Manual von PostgreSQL habe ich mir noch ein Buch über PHP und ein Tutorial über PHP und Postgres gegeben :wink:

Tja, aber leider stecke ich derzeit fest und komme einfach nicht weiter.
Ich habe auf dem Server mit PostgreSQL eine kleine Datenbank zum Testen gebaut und würde diese jetzt gerne übers Web (erstmal im LAN) abrufen.

Ich habe:
PostgreSQL 7.4.7
Apache-SSL 1.33
PHP Version 4.3.10-16.

Apache, PostgreSQL und PHP arbeiten an sich einwandfrei.

Mein Problem besteht bereits am Anfang: Ich kann zu der Datenbank keine Verbindung aufnehmen, obwohl die Angaben alle korrekt sind.

Der folgende Php-Code

<html>
	<title>Erste Datenbank </title>
	<body>
		<h2>Erste Datenbank </h2>
		
		<?
			echo "Test1..
\n";
			$host="localhost";
			$port="5432";
			$user="sqlusr";
			$password="";
			$dbname="mz";
			$connection = pg_connect("dbname=$dbname
												user=$user
												host=$host
												port=$port");

			echo "Test2..
\n";
			$db=pg_dbname($connection);
			echo "Test3..
\n";
			echo "Name der Datenbank ist $db.
\n";
		
		?>
		
	</body>
</html>

erzeugt folgenden Fehler

Erste Datenbank
Test1..

Fatal error: Call to undefined function: pg_connect() in /var/www/php5/index.php on line 13

Ich weiss einfach nicht, woran das liegt. Laut dem Tutorial sollte es mit pq_connect() funktionieren. Es ist doch alles richtig, oder?

Ich habe es auch mal mit

$conn=@pg_connect(...) or die(...);

ausprobiert, aber da kam nicht einmal die Meldung, die in “die(…)” steht.

echo "Name der Datenbank ist $db.
\n";

wird auch nicht ausgeführt.
Also er kommt erst garnicht so weit :frowning:

Ich habe noch nachgeguckt (phpinfo) und es sagt:

dbx
dbx support enabled
dbx version 1.0.0
supported databases MySQL ODBC PostgreSQL Microsoft SQL Server FrontBase Oracle 8 (oci8) Sybase-CT

Wäre jemand von Euch so nett und würde mir helfen?
Vielleicht habe ich ja doch was übersehen.

hi,

so wie es ausschaut ist der postgresql support nicht installiert. bitte den admin deines server die postgresql packete zu installieren. bei debian ubuntu ist das php4-pgsql bzw php5-pgsql…

cu tb.

Hi Xandrian!

Ja in der Tat. Jetzt bekomme ich andere Fehlermeldungen - aber es klappt!

Vielen herzlichen Dank !! << :smiley:

und viele Grüsse!
sqlman

Jetzt sagt er:

Erste Datenbank
Test1..

Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: IDENT authentication failed for user "sqlusr" in /var/www/php5/index.php on line 16
Test2..

Warning: pg_dbname(): supplied argument is not a valid PostgreSQL link resource in /var/www/php5/index.php on line 19
Test3..
Name der Datenbank ist .

Dabei habe ich doch mit

createuser sqlusr

den Benutzer doch erstellt.
Der User “sqlusr” verfügt über kein Passwort - zumindest habe ich keins angegeben.

:roll:

Viele Grüsse
sqlman

Hmm, könnte es daran liegen

mz=# \d
           List of relations
 Schema |   Name    | Type  |  Owner   
--------+-----------+-------+----------
 public | computers | table | postgres
(1 row)

mz=# select current_user;
 current_user 
--------------
 postgres
(1 row)

dass postgres der Owner ist?

Viele Grüsse

sqlman

Hi,

naja, ich habe jetzt den Owner gewechselt

mz=# ALTER TABLE computers OWNER TO sqlusr;
ALTER TABLE
mz=# \d
          List of relations
 Schema |   Name    | Type  | Owner  
--------+-----------+-------+--------
 public | computers | table | sqlusr
(1 row)

mz=#

aber es heisst immernoch:

Warning: pg_connect(): Unable to connect to PostgreSQL server: FATAL: IDENT authentication failed for user “sqlusr” in /var/www/php5/index.php on line 16

:frowning:

Was habe ich falsch gemacht?

Danke und Viele Grüsse
sqlman

Das Problem dürfte eher hierin bestehen:

http://www.postgresql.org/docs/current/static/client-authentication.html

Nach der Lektüre dieses Dokumentes dürftest du wissen, wie du deinem Client aus dem LAN den connect erlaubst.

Hi Ads,

ich danke Dir herzlich für den Hinweis.
Ich habe diesen Abschnitt der Doku überflogen.
Was ich vergessen habe zu tun, war in der Datei
/etc/postgresql/pg_hba.conf
den folgenden Eintrag zu machen:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               trust

ACHTUNG: Natürlich muss man später, wenn die Datenbank läuft, gewisse restriktive Änderungen vornehmen - aber für den Anfang reicht das.

Viele Grüsse
sqlman

PS: Für die Leute, die nicht darauf kommen sollten:
Nach der Änderung der besagten Konfigurationsdatei muss man postgresql natürlich neustarten :smiley:

falsch :stuck_out_tongue: ein reload reicht! vor allem für produktiv systeme interessant weil so der db server nicht weg ist aber die einstellungen auch wirksam werden…

cu tb.

Hallo Xandrian,

“reload”: Was beschreibt man damit, wie macht man das?


mfg

fristo

Hi,

ne Du machst unter Linux einfach nur

/etc/init.d/postgresql reload