Iniciando com PHP e InterBase
[ratings]
O InterBase existe desde meados de 1980. Depois de vários anos na estrada, ele se tornou Open Source pela Borland em Julho de 2000. A versão que vou utilizar é a 6.01 (= 6.0 + patch de segurança). Ela roda no Linux, vários derivados de Unix e no Windows.
O IB não exige muitos recursos da máquina. O espaço em disco requerido é em torno de 10MB.
Atualmente, o desenvolvimento do código é feito em 2 partes distintas :
- InterBase
- Firebird
Firebird é uma bifurcação do código liberado pela Borland. A comunidade Open Source é quem desenvolve o código, entre eles a IBPhoenix. Essa versão é aprimorada constantemente enquanto que o IB 6.0 continua estagnado desde o seu lançamento. O código do Firebird pode ser baixado do site firebird.sourceforge.net.
Por enquanto, o Firebird e o InterBase 6.0 são totalmente compatíveis.
A seguir seguem alguns sites com uma boa informação a respeito:
- IBPhoenix: http://www.ibphoenix.com/
- Firebird: http://www.firebirdsql.com/
- Borland official: http://www.borland.com/interbase/
Baixando e instalando o InterBase
O InterBase 6.01 pode ser baixado aqui.
O Firebird pode ser baixado aqui.
Para Linux existem 2 versões:
- Clássica;
- Super Server.
Compilando o PHP com suporte ao InterBase
Como muitas distribuições não compilam o suporte ao InterBase no PHP, é uma boa idéia saber como fazer isso. Descompacte o código-fonte do PHP no diretório de sua preferência e configure-o assim:
1
|
./configure -- with -interbase=/opt/interbase -- with -apxs |
1
2
|
make make install |
1
2
|
magic_quotes_sybase = On ; Use Sybase-style magic quotes (escape " with " " instead of \") extension=php_interbase.so |
Configurando o Apache
No caso do Apache, ele só precisa ser configurado para trabalhar com o módulo PHP. O InterBase em si é manuseado pelo PHP. Se você já usava o PHP antes no seu servidor, então não precisa fazer nada. Senão, abra o arquivo de configuração do apache, (httpd.conf, geralmente localizado em /etc ou /etc/httpd), procure pelas seguintes linhas e adicione-as ou descomente-as.
1
2
3
4
5
6
7
8
9
|
LoadModule php4_module /usr/lib/apache/libphp4.so AddModule mod_php4.c <IfModule mod_php4.c> AddType application/x-httpd-php .php AddType application/x-httpd-php .php4 AddType application/x-httpd-php-source .phps <IfModule> |
Não se esqueça também de adicionar index.php (ou alguma_coisa.php) como DirectoryIndex no arquivo de configuração do Apache.
Criando um novo usuário no banco de dados
Antes de criar um banco de dados, devemos primeiro criar um usuário. Para nosso exemplo usaremos username “phptest” e senha “phptest”. Isso pode ser feito utilizando-se o utilitário gsec que acompanha o InterBase/Firebird. Assumindo que a senha do SYSDBA seja masterkey, use o seguinte comando para criar o usuário:
1
|
/opt/interbase/bin/gsec -user sysdba -password masterkey -add "phptest" -pw "phptest" |
Criando um banco de dados de teste
Antes de criar o banco, baixe esse script : createdb.sql.
1
2
3
4
5
6
7
8
9
10 11
12
13
14
15
16
|
CREATE DATABASE "phptest.gdb" PAGE_SIZE=8192 DEFAULT CHARACTER SET ISO8859_1; CREATE TABLE ADDRESS ( CATEGORY INTEGER NOT NULL, NAME VARCHAR(100) NOT NULL, KEYINDEX INTEGER NOT NULL, ADDRESS BLOB SUB_TYPE TEXT SEGMENT SIZE 100, PRIMARY KEY (KEYINDEX) ); GRANT SELECT,DELETE,INSERT,UPDATE ON ADDRESS TO phptest; commit; |
1
|
/opt/interbase/bin/isql -i createdb.sql -u sysdba -p masterkey |
Alguns exemplos de código
Select:
1
2
3
4
5
6
7
8
|
$dbh = ibase_connect( "/home/yves/projects/php/phptest.gdb" , "phptest" , "phptest" , "ISO8859_1" ,0,1); $sth=ibase_query( "SELECT NAME,ADDRESS FROM ADDRESS WHERE KEYINDEX=?" ,$HTTP_POST_VARS[ "KEYINDEX" ]); while ($row = ibase_fetch_row($sth)) { print $row[0]. "\n" ; ibase_blob_echo($row[1]); } ibase_free_result($sth); ibase_close($dbh); |
1
|
print $row[0]. "\n" ; |
1
|
ibase_blob_echo($row[1]); |
Insert:
1
2
3
4
5
6
7
8
9
10 11
12
13
14
|
$dbh = ibase_connect( "/home/yves/projects/php/phptest.gdb" , "phptest" , "phptest" , "ISO8859_1" ,0,1); $blob_id = ibase_blob_create(); ibase_blob_add($blob_id,$HTTP_POST_VARS[ "ADDRESS" ]); $blob_id_str = ibase_blob_close($blob_id); $sth = ibase_prepare( "INSERT INTO ADDRESS (KEYINDEX,NAME,ADDRESS,CATEGORY) VALUES (?,?,?,?)" ); $trans=ibase_trans(); ibase_execute($sth,$HTTP_POST_VARS[ "KEYINDEX" ], stripslashes(strip_tags($HTTP_POST_VARS[ "NAME" ])), $blob_id_str,$HTTP_POST_VARS[ "CATEGORY" ]); ibase_commit($trans); ibase_free_query($sth); ibase_close($dbh); |
Update:
1
2
3
4
5
6
7
|
dbh = ibase_connect( "/home/yves/projects/php/phptest.gdb" , "phptest" , "phptest" , "ISO8859_1" ,0,1); $sth = ibase_prepare( "UPDATE ADDRESS SET NAME=? WHERE KEYINDEX=?" ); $trans=ibase_trans(); ibase_execute($sth,stripslashes(strip_tags($HTTP_POST_VARS[ "NAME" ])),$HTTP_POST_VARS[ "KEYINDEX" ]); ibase_commit($trans); ibase_free_query($sth); ibase_close($dbh); |