Informática

Iniciando com PHP e InterBase

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Email -- 0 Flares ×

[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:

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
Tenha certeza de passar o path correto do diretório do InterBase como parâmetro (/opt/interbase, no nosso caso). Então digite:
1
2
make
make install
Quando a instalação estiver terminada, abra o arquivo de configuração php.ini localizado em /usr/local/lib/, e verifique se as seguinte linhas existem (se preciso descomente-as):
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>
Eventualmente, para que suas páginas sejam processadas pelo PHP, você deverá utilizar a extensão php nelas.

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;
 Crie o banco de dados com o seguinte comando:
1
/opt/interbase/bin/isql -i createdb.sql -u sysdba -p masterkey
 É sempre uma boa idéia guardar os scripts para, se necessário, recriar o banco de dados. Lembre-se de alterar também a senha padrão do “sysdba”, pois ela é conhecida por todo mundo!

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);
A primeira linha faz uma conexão com o banco de dados. Nosso comando SQL é configurado na segunda linha. (Veja como a variável de formulário KEYINDEX é substituida dentro da query.) Finalmente, com a chamada ibase_fetch_row($sth), nós recuperamos linha a linha (bem, nesse exemplo apenas uma linha). No loop, o nome do campo é impresso por:
1
print $row[0]."\n";
Como nosso campo ADDRESS é um blob, ele é recuperado com:
1
ibase_blob_echo($row[1]);
Blobs de texto precisam ser tratados assim. Você não pode simplesmente imprimi-los com um simples “print”.

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);
Dê uma olhada nas linhas 3-5. A função ibase_blob_add é necessária para preparar os dados antes de você inseri-los no BD. Atualmente, os dados da variável $HTTP_POST_VARS[“ADDRESS”] são preparados e colocados no campo blob, usando a função $blob_id_str.

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);
Esse exemplo é auto explicativo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

error: Content is protected!!