|
|
|
|
|
|
| |
Like MySQL, the PostgreSQL database is quite popular among PHP developers.
Understandably, there are numerous well-documented PHP functions you can use in
conjunction with PostgreSQL; see the PHP Manual for a complete list. However,
you only need a few of these functions in order to make a simple connection and
select some data: |
|
pg_connect - opens a connection to PostgreSQL; requires a hostname, database name, username and password.
|
|
pg_exec - executes the SQL statement.
|
|
pg_numrows - returns the number of rows in a result |
|
|
pg_fetch_array - puts a SQL statement result row in an array. |
|
pg_freeresult - frees the resources in use by the current connection. |
|
pg_close - closes the current connection.
|
|
Just for argument's sake, let's pretend that a PostgreSQL database is already installed on your system, for which you have a valid username and password. Let's also assume that you've created a table on that database, called COFFEE_INVENTORY. The COFFEE_INVENTORY table has three columns: COFFEE_NAME, ROAST_TYPE and QUANTITY. |
|
The rows in the COFFEE_INVENTORY table could be populated with data such as: |
|
French Roast,dark,18 |
|
Kenya,medium,6 |
|
Ethiopian Harrar,medium,35 |
|
Sumatra,dark,8 |
|
Columbian,light,12 |
|
Now, let's do some PHP. Before you begin, you must know the name of the server on which the database resides, and have a valid username and password. Then, start your PHP code by creating a connection variable:
|
|
<?
$connection = pg_connect("host=YourHostname dbname=YourDBName user=YourUsername password=YourPassword");
|
|
|
Test that a connection was established, and if it wasn't, print an error message and exit the program:
|
|
if (!$connection) {
echo "Couldn't make a connection!";
exit;
}
|
|
|
Up to this point, you've told PHP to connect to a server and select a database. If you've made it this far, you can issue a SQL statement and hopefully see some results! Using the COFFEE_INVENTORY table, suppose you want to view your inventory, including the name of the coffee and the roast type, with the highest number of bags listed first. Create a variable that holds your SQL statement: |
|
|
$sql = "SELECT COFFEE_NAME, ROAST_TYPE, QUANTITY
FROM COFFEE_INVENTORY
ORDER BY QUANTITY DESC";
|
|
|
Next, create a variable to hold the result of the query, carried out by the pg_exec function. The pg_exec function takes two arguments: the connection and SQL statement variables you've just created. |
|
$sql_result = pg_exec($connection,$sql);
|
|
|
Get the number of rows in the result set, using the pg_numrows function: |
|
$num = pg_numrows($sql_result); |
|
To format the results currently held in $sql_result, first separate the results by row, using the pg_fetch_array function. |
|
$i = 0;
while ($i < $num) {
$row = pg_fetch_array($sql_result, $i);
// more code here...
$i++;
}
|
|
|
The while loop will create an array called $row for each record in the result set. To get the individual elements of the record (COFFEE_NAME, ROAST_TYPE, QUANTITY), create specific variables: |
|
$coffee_name = $row["COFFEE_NAME"];
$roast_type = $row["ROAST_TYPE"];
$quantity = $row["QUANTITY"];
|
|
|
You'll probably want to print the results in a simple HTML table. Step back and place this statement before the while loop begins, to open the table tag and create the row headings:
|
|
echo "<TABLE BORDER=1>";
echo "<TR><TH>Coffee Name</TH><TH>Roast Type</TH><TH>Quantity</TH>";
|
|
|
After defining the variables within the while loop, print them in table format:
|
|
echo "<TR><TD>$coffee_name</TD><TD>$roast_type</TD><TD>$quantity</TD></TR>";
|
|
|
The new while loop now looks like this:
|
|
while ($i < $num) {
$row = pg_fetch_array($sql_result, $i);
$coffee_name = $row["COFFEE_NAME"];
$roast_type = $row["ROAST_TYPE"];
$quantity = $row["QUANTITY"];
echo "<TR><TD>$coffee_name</TD><TD>$roast_type</TD><TD>$quantity</TD></TR>";
i++;
}
|
|
|
After the while loop, close the HTML table:
|
| |
|
Finally, you'll want to free up the resources used to perform the query, and close the database connection. Failing to do so could cause memory leaks and other nasty resource-hogging things to occur.
|
|
pg_freeresult($sql_result);
pg_close($connection);
?>
|
|
|
The full script to perform a simple connection and data selection from a PostgreSQL database could look something like this: |
|
<?php
// create connection
$connection = pg_connect("host=YourHostname dbname=YourDBName user=YourUsername password=YourPassword");
// test connection
if (!$connection) {
echo "Couldn't make a connection!";
exit;
}
// create SQL statement
$sql = "SELECT COFFEE_NAME, ROAST_TYPE, QUANTITY
FROM COFFEE_INVENTORY
ORDER BY QUANTITY DESC";
// execute SQL query and get result
$sql_result = pg_exec($connection,$sql);
// start results formatting
echo "<TABLE BORDER=1>";
echo "<TR><TH>Coffee Name</TH><TH>Roast Type</TH><TH>Quantity</TH>";
// get number of rows in result
$num = pg_numrows($sql_result);
// format results by row
$i = 0;
while ($i < $num) {
$row = pg_fetch_array($sql_result, $i);
$coffee_name = $row["COFFEE_NAME"];
$roast_type = $row["ROAST_TYPE"];
$quantity = $row["QUANTITY"];
echo "<TR><TD>$coffee_name</TD><TD>$roast_type</TD><TD>$quantity</TD></TR>";
$i++;
}
echo "</TABLE>";
// free resources and close connection
pg_freeresult($sql_result);
pg_close($connection);
?>
|
|
|
Please see the PHP Manual for additional PostgreSQL functions, and try using your own tables and SQL statements instead of the examples above.
|
|
| |
| Apache, PHP, and PostgreSQL on RedHat Linux Categories : Apache, PHP, Databases, PostgreSQL, Linux | | | PHP and PostgreSQL Categories : PHP, Databases, PostgreSQL | | | Creating Auto-incrementing ID Fields with PHP and Oracle Categories : PHP, PHP options/info, Databases, Oracle | | | PHP 101 Part 8 of 15 : Databases and Other Animals Categories : PHP, Beginner Guides, Databases | | | Saving Images in MySQL Categories : MySQL, PHP, Graphics, Databases | | | Simple Connection to Sybase with PHP Categories : PHP, Sybase, Databases | | | Custom MySQL-functions Categories : Databases, MySQL, PHP, PHP Functions | | | PHP 101 Part 9 of 15 : SQLite My Fire! Categories : PHP, Beginner Guides, Databases, SQLite | | | Referer Statistics Categories : PHP, MySQL, HTTP, Databases | | | Simple ODBC Connections with PHP Categories : PHP, ODBC, Databases | | | User identification using cookies in PHP and MySQL Categories : PHP, Databases, MySQL, Cookies | | | Multicolumn Output from a Database with PHP Categories : PHP, Databases, HTML and PHP, MySQL | | | Creating an IE-Only Database Driven Menu System With PHP, MySQL and DHTML Categories : PHP, MySQL, Databases, DHTML | | | Simple Connection to Informix with PHP Categories : PHP, Informix, Databases | | | PHP and MySQL News with Comments Categories : PHP, Databases, MySQL | |
| | | Silvio Macedo wrote : 24 Q:Doesn`t pg_fetch_array require a second
argument with row number ?
A:yes it does...
| | | Julie Meloni wrote : 25 Yep, that previous comment is correct, and the code has been changed to reflect it. | | | maxime roy wrote : 381 Very useful for my project. Thanks! | |
|
|
|