Quinta-feira, 01 de fevereiro de 2007 às 11h03

PHP5 e SQLite no Windows

Faltam -1 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

Olá Pessoal! Essa semana falarei sobre uma novidade do PHP5: o SQLite. Uma biblioteca C que implementa um banco de dados SQL embutido, sem que haja a necessidade de ter um SGDB, como MySQL e Oracle. A biblioteca lê e grava diretamente em arquivos de banco de dados no disco. Essa é uma boa alternativa para quem precisa de velocidade e não necessita de todos os recursos oferecidos pelos SGDB's.

Versões utilizadas:

  • PHP 5.2.0
  • Apache 2.0.59
  • SQLite 2.8.17 ou SQLite 3.3.12
  • Windows XP

Características:

  • Software Livre e Multiplataforma;
  • O Banco de dados é guardado em um único arquivo;
  • Suporta base de dados acima de 2 terabytes;
  • Suporta Strings e Blob's acima de 2 gigabytes;
  • Implementa a maioria do SQL92;
  • Sem dependências externas;
  • Suporte parcial a triggers e views;
  • Suporta vários processos de leitura ao mesmo tempo, porém, as operações de escrita são realizadas 1 a 1. Para isso, a engine loca o arquivo db.
  • Ainda não possui suporte a integridade referencial;

Trabalhando com SQLite e PHP

Apresentaremos 03 maneiras de trabalhar com o SQLite e PHP:

  • SQLite 2;
  • SQLite 2 Orientado a Objeto;
  • SQLite 3 com PDO;

PDO

PHP Data Objects é uma extensão que vem junto com o PHP5 que propõe aos desenvolvedores não mais utilizarem o acesso direto a API de controle da base de dados, seria a famosa abstração como o PEAR::DB. Resumindo, poderíamos mudar o banco de dados do nosso sistema apenas alterando uma única linha de código.

Instalação no Windows:

SQLite2

  • Acessar o endereço: http://www.sqlite.org/download.html e baixar o arquivo sqlite-2_8_17.zip;
  • Descompactar e copiar o arquivo sqlite.exe para a pasta WINNT do seu Windows( XP, 2000 etc..);

Configurando PHP com SQLite2

  • Editar o php.ini e descomentar/adicionar as seguintes linhas:

extension=php_pdo.dll|

extension=php_sqlite.dll

  • Crie um arquivo chamado phpinfo.php para checarmos se as extensões foram carregadas corretamente:

phpinfo.php

<?
phpinfo();
?>

Exemplos utilizando PHP e SQLite2:

sqlite2.php

<?
//caso a base de dados não exista, ele tenta criar
if ($db = sqlite_open("c:/pagina/databases/imasters.db", 0666, $error)) {
echo "Banco de dados aberto...";

//cria a tabela
@sqlite_query($db, "CREATE TABLE colunistas( id INTEGER PRIMARY KEY, nome TEXT)");

//insere dados
sqlite_query($db, "INSERT INTO colunistas VALUES( NULL, 'Júlio César Martini')");

//exibe os dados cadastrados
$sql = sqlite_query($db, "SELECT id, nome FROM colunistas");

//visualiza os dados gravados
while ($i = sqlite_fetch_array($sql)) {
echo "<br><br>";
echo "ID: ".$i['id']."<br>";
echo "Nome: ".$i['nome'];
}//fecha while
}
else {
die($error);
}
?>

Exemplos utilizando PHP e SQLite2 Orientado a Objeto:

sqlite2_oo.php

<?
try {
//instancia
$db = new SQLiteDatabase("c:/pagina/databases/imasters.db", 0666);
}
catch( Exception $exception ){
die($exception->getMessage());
}

//cria a tabela
//comentar as 02 linhas abaixo após executar o script pela primeira vez
$sqlC = "CREATE TABLE colunistas(id INTEGER PRIMARY KEY, nome TEXT)";
$db->queryExec($sqlC);

//insere dados
$sqlI = "INSERT INTO colunistas (id, nome) VALUES (NULL, 'Júlio César Martini')";
$db->queryExec($sqlI);

//visualiza
foreach ($db->query("SELECT id, nome FROM colunistas") as $row) {
print_r($row);
echo "<br>";
}
?>

Exemplos utilizando PHP e SQLite3 com PDO:

sqlite3_pdo.php

<?
//instância
$db = new PDO("sqlite:c:/pagina/databases/imasters.db");

//cria a tabela
$sqlC = "CREATE TABLE colunistas ( id INTEGER PRIMARY KEY, nome TEXT)";
$db->exec($sqlC);

//insere os dados
$sqlI = "INSERT INTO colunistas (id, nome) VALUES (NULL, 'Júlio César Martini')";
$stmt = $db->exec($sqlI);

//visualiza
foreach ($db->query("SELECT id, nome FROM colunistas") as $row) {
print_r($row);
echo "<br>";
}
?>

Criando uma trigger com o SQLite3

A trigger é disparada implicitamente quando uma tabela é modificada, um objeto é criado ou quando ocorre ações de usuário no sistema. O exemplo abaixo, cria uma trigger que terá por finalidade gravar o valor antigo do campo nome da tabela colunista sempre que ela for alterada.

01. No prompt, digite sqlite3 <>;

02. Crie a tabela HIST_COLUNISTAS;

CREATE TABLE hist_colunistas(
id INTEGER
, nome_antigo TEXT
, nome_novo TEXT);

03. Crie a trigger: tr_af_up_colunistas:

CREATE TRIGGER tr_af_up_colunistas
AFTER UPDATE ON colunistas
FOR EACH ROW
BEGIN
INSERT INTO hist_colunistas(id, nome_antigo, nome_novo)
VALUES(OLD.id, OLD.nome, NEW.nome);
END;

04. Quando ocorrer qualquer alteração na tabela colunistas, será gravado um registro na tabela hist_colunistas;

Criando uma view com o SQLite3

A view é uma tabela virtual onde os dados não estão fisicamente armazenados. Ela é apenas uma visão de uma ou mais colunas de uma ou mais tabelas do banco.

CREATE VIEW IF NOT EXISTS imasters AS
SELECT nome FROM colunistas;

No exemplo acima, estamos criando uma view chamada imasters que terá como coluna apenas o nome dos colunistas.

Situações onde o SQLite funciona bem:

  • A maioria dos sites web (menos de 100 mil visitas/dia);
  • Substituto para arquivos de uso específico;
  • Bases de dados internas ou temporárias;
  • Programas locais;
  • Substituto de bancos de dados de grande porte em testes e demostrações;
  • Formato de arquivo de programas;
  • Dispositivos e programas embutidos;
  • Ensino de banco de dados.

Ferramentas:

Abaixo, segue algumas ferramentas para manipulação de arquivos baseados no SQLite.

SQLiteFront (português)|

http://sqlitefront.sourceforge.net

SQLite Database Browser|

http://sqlitebrowser.sourceforge.net

SQLite Manager|

http://www.sqlitemanager.org/

PHP SQLite Admin|

http://phpsqliteadmin.sourceforge.net/

Links:

Abaixo, segue alguns links para complementar o estudo desse artigo:

Site Oficial SQLite:

http://www.sqlite.org/

Comunidade Brasileira SQLite

http://sqlitebrasil.codigolivre.org.br

SQLite ODBC Driver

http://www.ch-werner.de/sqliteodbc/

Downloads: Download do Script

Semana que vem tem mais. Espero que vocês tenham gostado.

Não deixe de nos enviar críticas ou sugestões para o próximo assunto, afinal a coluna é de vocês.

Boa semana a todos!

Até mais.

5 comentários

 Paulo Henrique Araújo
02/02/2007 13h41

Dúvida

Júlio, primeiramente gostaria de parabenizá-lo pela presente matéria. Bem interessante.
Agora gostaria de contar com sua ajuda para resolver um probleminha. Até lhe enviei um email a respeito.
Preciso que minha própria página php altere seu código fonte. Tipo:
tenho um campo de texto. Nele digito "oi mundo". no meu código original, antes era:
define('fulano',"");
Agora terá que ficar:
define('fulano',"oi mundo");
O código pegou o valor da input e jogou no fonte, alterando-o. Como faço isso:??
Desde já conto com sua capacidade
Abraços

 Paulo Henrique Araújo
02/02/2007 13h41

...

ah, se puder, me envie uma resposta para o email pigctu@gmail.com

 Ronaud Pereira
22/02/2007 22h19

Muito bom...

Olá Júlio, seus artigos já me ajudaram muito em meu trabalho e é com satisfação que vejo seu retorno aos artigos php depois de alguns meses. Sucesso!!!

 Vinicius Depizzol
22/06/2007 15h29

Facilidade...

Em pensar que no Ubuntu você instala o Sqlite no PHP só indo no Gerenciador de Pacotes e marcando para instalação o pacote php5-sqlite... dois cliques e pronto.

 jose brandao
13/12/2007 20h10

Instalar Apache no windows 2000 professinal..

Não consigo instalar o Apache no Windows 2000 Professional. A intalação "trava", e nunca é concluida.
Ela chega no status: creating shortcurts.
jfbransou@gmail.com

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Júlio César Martini atualmente presta serviços de WebMaster/Programador para o UOL (http://www.uol.com.br), Graduado em Tecnólogo em Informática pela UNIFIAN - Faculdades Anhanguera e Pós-Graduado em Desenvolvimento de Software para Web pela UFSCAR. Foi o primeiro profissional a chegar à marca de 100 artigos publicados no iMasters e trabalha com PHP desde 2000. Site: http://www.juliocesarmartini.com

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.