+1

Creole - Abstraindo o Acesso ao Banco de Dados

criado por Marlon Silva Carvalho em 24/02/2005 10:14pm
Neste primeiro exemplo acessaremos uma tabela simples, organizada conforme a query abaixo:

CREATE TABLE tbl_produtos (
    id INT NOT NULL PRIMARY KEY,
    descricao VARCHAR(50)
);

O primeiro passo, então, é obter uma conexão, portanto, devemos realizar os passos descritos na listagem abaixo.

<?php

/* Setando onde estão os arquivos do Creole. */
set_include_path("<creole>/classes:" . get_include_path());

/* Incluindo em nosso script os arquivos do Creole. */
require_once ( "creole/Creole.php" ) ;

/*  Obtendo uma conexão ao banco de dados MySQL. */
$conn = Creole::getConnection ( "mysql://dbuser:dbpass@localhost/testdb" ) ;
?>

Esta não é a única forma, entretanto, é uma das mais simples. É possível também obter uma conexão através de um array, como descrito na listagem a seguir.

<?php

/* Setando onde estão os arquivos do Creole. */
set_include_path("<creole>/classes:" . get_include_path());

/* Incluindo em nosso script os arquivos do Creole. */
require_once ("creole/Creole.php") ;

/*  Obtendo uma conexão ao banco de dados MySQL. */
$dsn = array('phptype' => 'mysql',
             'hostspec' => 'localhost',
             'username' => 'dbuser',
             'password' => 'dbpass',
             'database' => 'testdb');

$conn = Creole::getConnection($dsn) ;
?>

Realizada a conexão, devemos agora obter informações da nossa base de dados. Agora é que as coisas ficam interessantes e bastante agradáveis para os programadores Java que, assim como eu, acham a solucão JDBC muito interessante. Observe a listagem logo abaixo.

<?php

/* Setando onde estão os arquivos do Creole. */
set_include_path("<creole>/classes:" . get_include_path());

/* Incluindo em nosso script os arquivos do Creole. */
require_once ("creole/Creole.php");

/*  Obtendo uma conexão ao banco de dados MySQL. */
$conn = Creole::getConnection("mysql://dbuser:dbpass@localhost/testdb");

/* Obtendo o ResultSet. */
$rs = $conn->executeQuery("SELECT * FROM tbl_produtos");
	
/* Iterando nos resultados. */
while($rs->next()) {
    print("Descricao: " . $rs->getString("descricao") . " ( " . $rs->getInt("id") . " ) <br/>");
}
?>

Para atualizar informacões em nossa base de dados, podemos utilizar o objeto PreparedStatement, que funciona de forma semelhante ao seu equivalente em JDBC. O código da próxima listagem ilustra o seu uso.

<?php

/* Setando onde estão os arquivos do Creole. */
set_include_path("<creole>/classes:" . get_include_path());

/* Incluindo em nosso script os arquivos do Creole. */
require_once("creole/Creole.php");

/*  Obtendo uma conexão ao banco de dados MySQL. */
$conn = Creole::getConnection("mysql://dbuser:dbpass@localhost/testdb");

/* Criando o PreparedStatement. */
$stmt = $conn->prepareStatement("UPDATE tbl_produtos SET descricao = ? WHERE id = ?");

/* Preenchendo os parâmentros "?" */
$stmt->setString(1 , "Sabão");
$stmt->setInt(2 , 1000);

/* Confirmando a atualização. */
$stmt->executeUpdate();
?>

Este primeiro artigo tem como objetivo apresentar a ferramenta e ilustrar um pouco o seu uso. O Creole possui inúmeros outros recursos que podem ser explorados, sugiro acessar o site deles em http://creole.phpdb.org/ e ler a documentação que é bastante completa. Em breve estaremos publicando novos artigos ou tutoriais sobre esta ferramenta, com exemplos mais complexos.

Abraços,
Marlon Silva Carvalho
http://www.marloncarvalho.net/

Comentários:

Mostrando 1 - 9 de 9 comentários
Baruch Ramses disse:
Bom artigo! Parabéns pela exposição clara e eficiente.Estou implementando o Creole e caso necessite de ajuda já sei a quem recorrer.
29/06/2005 11:09am (~16 anos atrás)

Muito bom o artigo e o framework. É uma mão na roda, já que o php não tem a parte de banco muito boa e sempre temos que implementar. O creole pelo que eu vi aqui no artigo é bem fiel ao JDBC. Agora vou ali baixar e testar... vlw ae pela dica :))
13/06/2005 12:00am (~16 anos atrás)

Erick,
O Creole trata excecoes de forma bem parecida com o JDBC.
22/04/2005 3:23pm (~16 anos atrás)

Erick Melo disse:
Achei interessante essa API. Agora ficou uma dúvida:

No JAVA é necessário fazer um tratamento de exceções quando se trabalha com Banco de Dados.

No caso dessa biblioteca Creole, como são tratadas as excessões? Existe algum tratamento eficaz?
21/04/2005 3:21pm (~16 anos atrás)

Fico devendo uma resposta mais completa, entretanto, até onde conheco esta biblioteca, ela não suporta este tipo de transacão.

Isto principalmente devido à "natureza desconectada" do PHP, diferente dos Servlets do Java. Ainda não fiz nenhum teste sobre isso, mas pelo que conheco do PHP, tenho quase certeza que não é possível fazer o que você pretende. Também não sei se com conexões persistentes é possível.
28/02/2005 1:24pm (~16 anos atrás)

Kelvin Weiss disse:
Com esta biblioteca, temos um controle real de transações? Por exemplo, abrir uma transação na pagina cadastro_inicio.php e terminá-la na página cadastro_fim.php?

Isso no caso por exemplo de nota fiscal x item, onde um NF só pode ser gravada no momento em que um item for inserido.

obrigado.
28/02/2005 12:29pm (~16 anos atrás)

Sim, o ADODb é muito bom. Já o utilizei em um projeto grande e o rendimento dele foi satisfatório. Acredito que cada um deve usar o framework que atende melhor aos seus requisitos.
Imagine que você tenha uma equipe de bons programadores Java, e que precisam agora entrar em um projeto em PHP. Naturalmente, tempo é dinheiro, logo a solucão mais viável é utilizar algo similar e que os programadores já tem conhecimento, como o Creole.
Mas concordo sim que o ADODb é uma solucão excelente e que merece ser vista, o Creole é mais uma opcão e boa opcão. Cada um tem seus prós e contras, cabe a cada um avaliar a que melhor se adapta as suas necessidades.
25/02/2005 3:45pm (~16 anos atrás)

Marcelio Leal disse:
Achei interessante o artigo, não conhecia o framework, mas pelo que vi na documentação o ADODB ainda é bem melhor.

Na verdade eu acho a idéia do ADODB é melhor que a do JDBC, é muito show pq utiliza a mesma metodologia que o pessoal do PHP pensou tb.

PEAR::DB também é interessante.

Lá no site do ADODB tem uma comparação.
25/02/2005 3:36pm (~16 anos atrás)

parabéns Marlon, este artigo foi muito útil para mim!
25/02/2005 9:26am (~16 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)