Creole - Abstraindo o Acesso ao Banco de Dados
Neste primeiro exemplo acessaremos uma tabela simples, organizada conforme a query abaixo:
O primeiro passo, então, é obter uma conexão, portanto, devemos realizar os passos descritos na listagem abaixo.
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.
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.
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.
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/
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/
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
(~19 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
(~19 anos atrás)
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?
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
(~19 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.
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
(~20 anos atrás)
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.
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
(~20 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.
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
(~20 anos atrás)
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.
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
(~20 anos atrás)