(Parte 1 de 6)

By Vikram Vaswani This article copyright Melonfire 2000−2002. All rights reserved.

A Matter Of Choice1
Getting Started2
First Steps5
Digging Deeper8
Different Strokes10
Rolling Around14
Catching Mistakes16
A Well−Formed Idea18
Surfing The Web20

Table of Contents PHP and PostgreSQL

A Matter Of Choice

There's something patently unfair going on here. For some reason, almost every PHP tutorial on the planet makes the implicit assumption that if you're using PHP with a database, that database is going to be MySQL.

Now, I have absolutely nothing against MySQL − I think it's a great product, and I use it fairly often in my development activities. However, it's not the only good open−source RDBMS out there − most developers have been playing with PostgreSQL for quite a while now, and quite a few of them would love to integrate their PostgreSQL backend with PHP. The only problem is, they have no idea where to start − the functions used to communicate with a PostgreSQL database are different from those used in a MySQL environment, and the documentation out there could do with some updating.

Well, it's time to bring some balance back to the universe. Which is why this article looks at PHP from the PostgreSQL developer's point of view, explaining how PHP can be used with the PostgreSQL database system. If you're a MySQL user, you probably don't need to know any of this; if you're a PostgreSQL fan, on the other hand, you can breathe a sigh of relief and flip the page.

A Matter Of Choice1

Getting Started

Before we get started, you need to make sure that you have everything you need to successfully use PHP with PostgreSQL. Here's your cheat sheet:

1. The latest version of PostgreSQL, available from http://www.postgresql.org (this article uses version 7.1)

2. A Web server which supports PHP, available from http://www.php.net/ (this article uses Apache 1.3.24 with PHP 4.2.0)

Note that your PHP build must support PostgreSQL in order for the examples in this article to work correctly. You can include PostgreSQL support in your PHP build by adding the "−−with−pgsql" configuration parameter when compiling the package. Note also that PHP 4.2.0 and better contains fairly extensive changes to the function names used in the language's PostgreSQL module; this article uses the new function names and assumes that you're running PHP 4.2.x. Drop by http://www.php.net/manual/en/ref.pgsql.php for more information on the changes, and the corresponding function names for older versions.

I'm not going to get into the details of configuring and installing either PostgreSQL or PHP here − the documentation included with both those packages has more than enough information to get you started, and the accompanying Web sites contain lots of troubleshooting information should you encounter problems. In case you don't already have these packages installed on your development system, drop by the Web sites listed above, get yourself set up and come back once you're done.

Assuming that you have a properly configured and installed setup, the first step is to start both the database server and the Web server.

[postgres@medusa] $ /usr/local/pgsql/bin/postmaster −i −D /usr/local/pgsql/data & DEBUG: database system was shut down at 2002−04−12 19:18:12 IST DEBUG: CheckPoint record at (0, 1694744) DEBUG: Redo record at (0, 1694744); Undo record at (0, 0); Shutdown TRUE DEBUG: NextTransactionId: 643; NextOid: 18778 DEBUG: database system is in production state [postgres@medusa] $ su − root [root@medusa] $ /usr/local/apache/bin/apachectl start Starting httpd [OK] [root@medusa] $

Note that the PostgreSQL server must be started as the special "postgres" user created during the installation process, and the startup invocation must include the additional "−i" parameter to allow TCP/IP connections to the server.

The next step is to create an example database table that can be used for the code listings in this article. Here's

Getting Started2 what the SQL dump file looks like:

CREATE TABLE addressbook (id serial, name varchar(255), address text, tel varchar(50), email varchar(255));

INSERT INTO addressbook values (nextval('addressbook_id_seq'), 'Bugs Bunny', 'The Rabbit Hole, Looney Toons, USA', '123 4567', 'bugs@wascallywabbit.net');

INSERT INTO addressbook values (nextval('addressbook_id_seq'), 'Robin Hood', 'Sherwood Forest', 'None', 'robin@steal.from.the.rich');

INSERT INTO addressbook values (nextval('addressbook_id_seq'), 'Sherlock Holmes', '221B Baker Street, London 16550, England', '911 1822', 'holmes@bakerstreetirregulars.domain');

You can import this data into PostgreSQL by dropping to a shell and using the following command:

[postgres@medusa] $ /usr/local/pgsql/bin/createdb test [postgres@medusa] $ /usr/local/pgsql/bin/psql −d test −f /home/postgres/addressbook.sql

Now check whether or not the data has been successfully imported with a SELECT query (the SELECT SQL statement is used to retrieve information from a database) via the interactive PostgreSQL monitor program "psql".

[postgres@medusa] $ /usr/local/pgsql/bin/psql −d test Welcome to psql, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms \h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit test=# SELECT COUNT(*) FROM addressbook; count

PHP and PostgreSQL

Getting Started3

test=# which, in English, means "count all the records in the table addressbook and give me the total". If your output matches what's listed above, take a celebratory sip of Jolt − you're in business!

PHP and PostgreSQL

Getting Started4

First Steps

Now, how about doing the same thing with PHP − fire a SELECT query at the database, and display the results in an HTML page?

<html> <head><basefont face="Arial"></head>


<? // database access parameters

// alter this as per your configuration $host = "localhost";

$user = "postgres";

$pass = "postgres";

$db = "test";

// open a connection to the database server $connection = pg_connect ("host=$host dbname=$db user=$user password=$pass"); if (!$connection) { die("Could not open connection to database server"); }

// generate and execute a query $query = "SELECT * FROM addressbook";

$result = pg_query($connection, $query) or die("Error in query: $query. " . pg_last_error($connection));

// get the number of rows in the resultset $rows = pg_num_rows($result); echo "There are currently $rows records in the database.";

// close database connection pg_close($connection);

</body> </html>

(Parte 1 de 6)