RkBlog

Hardware, programming and astronomy tutorials and reviews.

PostgreSQL i PHP

Opis funkcji PHP umożliwiających połączenie się i wykonywanie zapytań SQL na serwerze baz danych PostgreSQL

PostgreSQL to relacyjna baza danych od bardzo dobrej renomie. Przez wielu uznawana za bardziej wydajną niż MySQL, co ma potwierdzenie w wynikach. Baza ta w porównaniu do MySQL przy niedużych obciążeniach jest wolniejsza, lecz zaletą jest jej wytrzymałość na obciążenie oraz znacznie bardziej rozbudowane opcje języka SQL (możliwość stosowania języków proceduralnych itd. itp.) jednym słowem posiada wiele opcji używanych w rozwiązaniach enterprise. Poniższa klasa umożliwia operacje na bazie postgreSQL (wymaga PHP5):
<?php
class postgresql
	{
	public function __construct($host, $user, $password, $dbname)
		{
		// Próbujemy się połączyć
		IF(!$this->db = pg_connect('host='.$host.' dbname='.$dbname.' user='.$user.' password='.$password.''))
			{
			$this->error = true;
			throw new Exception('Błąd Połączenia z Bazą Danych - '.pg_last_error());
			}
		// połączyliśmy się, rozpoczynamy tranzakcję
		pg_query($this->db, 'BEGIN');
		}
	public function query($query)
		{
		// wykonywanie zapytań nie-SELECT
		IF(!ereg('SELECT', $query) and !$this->error)
			{
			IF(!$result = pg_query($this->db, $query))
				{
				$this->error = true;
				throw new Exception('Błąd wykonania zapytania - ('.$query.') - '.pg_last_error());
				}
			else
				{
				return true;
				}
			}
		else
			{
			return false;
			}
		}
	public function query_select($query)
		{
		// Zapytania select
		IF(!$this->error)
			{
			IF(!$result = pg_query($this->db, $query))
				{
				$this->error = true;
				throw new Exception('Błąd wykonania zapytania - ('.$query.') - '.pg_last_error());
				}
			while($row = pg_fetch_array($result, null, PGSQL_ASSOC))
				{
				$return[] = $row;
				}
			unset($result);
			unset($row);
			return $return;
			}
		}
	public function escape($string)
		{
		return  pg_escape_string($string);
		}
	function __destruct()
		{
		IF(!$this->error)
			{
			pg_query('COMMIT');
			}
		else
			{
			pg_query('ROLLBACK');
			}
		unset($this->db);
		unset($this->error);
		}
	}
// PRZYKŁADOWE ZASTOSOWANIE
$pgs = new postgresql('HOST', 'USER', 'HASŁO', 'NAZWA BAZY DANYCH');
$pgs->query("CREATE TABLE rk_pages ( page_id SERIAL, page_title varchar(255) default NULL,  page_desc text,  page_content text,  PRIMARY KEY  (page_id))");
$pgs->query("INSERT INTO rk_pages (page_title, page_desc, page_content) VALUES ('tytuł1', 'opis1', 'treść artykułu1')");
$pgs->query("INSERT INTO rk_pages (page_title, page_desc, page_content) VALUES ('tytuł2', 'opis2', 'treść artykułu2')");
echo '<pre>';
print_r($pgs->query_select("SELECT * FROM rk_pages"));
Z widocznych różnić (w porównaniu do MySQL) to:
- nie ma pól "AUTO INCREMENT" - są pola "SERIAL"
- nie ma funkcji zwracającej wartość pola SERIAL po ostatnim INSERCie
- ta klasa nie wykorzystuje dodatkowych opcji Postgresa :)
RkBlog

14 July 2008;

Comment article