RkBlog

Hardware, programming and astronomy tutorials and reviews.

Firebird

Firebird to relacyjna baza danych powsta艂a po otworzeniu komercyjnej bazy danych - Interbase. Jest lekka, ma ma艂e wymagania, jest nowoczesna, posiada szerok膮 implementacj臋 j臋zyka SQL i wiele innych zalet, chocia偶 dla przeci臋tnego zjadacza PHP/MySQL zbyt przyjazna nie b臋dzie. Firebirda mo偶na 艂atwo zainstalowa膰 w MS Windows, r贸wnie 艂atwo pod linuksem (je偶eli dana dystrybucja ma j膮 w postaci pakietu).

TWORZENIE BAZY DANYCH

Zaczynamy od namierzenia miejsca, w kt贸rym zainstalowany jest Firebird. Dla Gentoo jest to /opt/firebird. Przechodzimy do katalogu /opt/firebird/bin i jako root wydajemy polecenie:
./isql
Tworzymy baz臋 danych wpisuj膮c:
SQL> CREATE DATABASE './foo.fdb'
CON> user 'SYSDBA' password 'masterkey';
SQL> quit;
Stworzony zostanie plik foo.fdb - plik baza danych. Mo偶emy go przenie艣膰 np. do katalogu u偶ytkownika. SYSDBA to domy艣lny u偶ytkownik Firebirda, masterke (lub masterkey) to domy艣lne jego has艂o.

PHP i FIREBIRD

Oto prosta klasa obs艂uguj膮ca baz臋 Firebird. Firebird korzysta z funkcji ibase_* (interbase). Dost臋pny jest te偶 driver do PDO, lecz na chwil臋 obecn膮 nie jest chyba zbyt stabilny.
<?php
class firebird_db
	{
	public function connect($host, $user, $password)
		{
		IF(!$this->f = ibase_connect($host, $user, $password))
			{
			$this->error = true;
			throw new Exception('B艂膮d Po艂膮czenia z Baz膮 Danych');
			}
		$this->firebird = ibase_trans($this->f);
		}
	public function query($query)
		{
		IF(!ereg('SELECT', $query) and !$this->error)
			{
			IF(!$result = ibase_query($this->firebird, $query))
				{
				$this->error = true;
				throw new Exception('B艂膮d wykonania zapytania - ('.$query.') - '.ibase_errmsg());
				}
			else
				{
				return true;
				}
			}
		}
	public function query_select($query)
		{
		IF(!$this->error)
			{
			IF(!$result = ibase_query($this->firebird, $query))
				{
				$this->error = true;
				throw new Exception('B艂膮d wykonania zapytania - ('.$query.') - '.ibase_errmsg());
				}
			while($row = ibase_fetch_row($result))
				{
				$return[] = $row;
				}
			unset($result);
			unset($row);
			return $return;
			}
		}
	function __destruct()
		{
		IF(!$this->error)
			{
			ibase_commit($this->firebird);
			}
		else
			{
			ibase_rollback($this->firebird);
			}
		ibase_close($this->f);
		unset($this->f);
		unset($this->error);
		unset($this->firebird);
		}
	}
$f = new firebird_db();
// host:艣cie偶ka/do/pliku
$f->connect('localhost:/home/piotr/html/foo.fdb', 'SYSDBA', 'masterke');
$f->query("CREATE TABLE foo (id int, tekst varchar(1000))");
$f->query("INSERT INTO foo VALUES ('1', 'bla bla bla')");
$f->query("INSERT INTO foo VALUES ('2', 'bla2 bla2 bla')");
$f->query("INSERT INTO foo VALUES ('3', 'bla3 bla3 bla')");
$f->query("INSERT INTO foo VALUES ('4', 'bla4 bla4 bla')");
echo '<pre>';
print_r($f->query_select("SELECT * FROM foo"));
echo '</pre>';
G艂贸wnym problemem dla "pocz膮tkuj膮cych" jest brak pola automatycznie zwi臋kszaj膮cego swoj膮 warto艣膰 (auto_increment, serial itd.) By takie pole otrzyma膰 trzeba stosowa膰 generatory. Sk艂adnia SQL r贸偶ni si臋 nieco od sk艂adni w innych bazach danych. Zainteresowani dalsz膮 nauk膮 mog膮 pobra膰 (po darmowej rejestracji) artyku艂 z PHPSolutions (po polsku) st膮d. Opr贸cz tego google i artyku艂y angloj臋zyczne.
RkBlog

PHP w Akcji, 14 July 2008, Piotr Mali艅ski

Comment article