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|
PHP SQLite Admin|
http://phpsqliteadmin.sourceforge.net/
Links:
Abaixo, segue alguns links para complementar o estudo desse artigo:
Site Oficial SQLite:
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.