PHP + MySQL – manipulando registros com uma linha de código

Manipulando com PHP, de forma simples, dados do banco MySQL .

A ideia da classe é simplificar o acesso ao banco no que diz respeito as transações simples como:
– Create
– Read
– Update
– Delete

Não é nenhum conjunto de classes fantásticas,  é uma única classe com métodos básicos que podem servir para criar pequenas rotinas de forma rápida e limpa (isso é importante também).

A classe chamada aqui de Influx possui cerca de 15% dos métodos e funcionalidades da classe original que utilizo em meus projetos (é podem dizer, fora framework caseiro… mas me serve muito bem).

Eu peguei alguns trechos da classe afim de compartilhar com vocês no intuito de criarem coisas simples que tanto procuram aqui, como galerias por exemplo.

No geral, posso dizer que a classe “trabalha” com arrays no PHP, para tudo.
Todos os parâmetro são passados ou retornados em arrays, à partir daí vai contar a criatividade do programador (iniciante), lembrando que não é destinada à programadores experientes que procuram algo belo, a ideia é fazer com que um iniciante consiga criar pequenas rotinas com poucas linhas.

Primeiramente vamos ver alguns exemplos e depois falamos da configuração do banco (1 única linha).
Para todos os exemplos vamos utilizar uma tabela de 2 campos (item_id e item_desc)

1º – Retornando dados da tabela  (array)

<?php

$this->select()->from( 'item' )->execute();
 //verifica se há registros
 if ( $this->check() )
 {
 //printa o array retornado
 $this->printr( $this->data );
 }

?>

Os métodos estão  encadeados nesse exemplo acima, poderia ser normalmente como abaixo:

<?php

$this->select();
$this->from( 'item' );
$this->execute();
//verifica se há registros
if ( $this->check() )
{
//printa o array retornado
$this->printr( $this->data );
}

?>

Antes que questionem o título do post (manipulando registros com uma linha):

<?php

//removendo um registro
$this->delete()->from( 'item' )->where('item_id = 1')->execute();

//atualizando um registro
$this->update('item')->set(array('item_desc'), array('foobaz'))->where('item_id = 1')->execute();

?>

O retorno seria:

<?php

Array
(
 [1] => Array
 (
 [item_id] => 1
 [item_desc] => Bar
 )

[2] => Array
 (
 [item_id] => 2
 [item_desc] => Foo
 )
)
?>

A ideia da classe é utilizar métodos que criem (concatenem) uma string que será nossa query.

No exemplo acima utilizamos:
$this->select()->from(‘item’)->execute();

Que gera a query string : SELECT * FROM item;

A classe possui métodos para formar uma query string básica mas funcional, alguns métodos:


<?php
//se não passar nenhum parâmetro no select é assumido o * (todos os campos da tabela)
$this->select('campo1, campo2, campoN');
$this->from('tabela');
$this->where('item_id = 1');

$this->select()->from('tabela')->where('item_id  = 1')->execute();

$this->select()->from('tabela')->where( " item_desc like '%foo%' ")->execute();

$this->update('tabela');
$this->set(array('campo1','campo2'), array('valor1','valor2'));

$this->insert('tabela');
$this->fields(array('campo1','campo2'));
$this->values(array('valor1','valor2'));

//executa a query
$this->execute();

//verifica se houve resultados/registros (retorna true or false )
//utilizado após o select
$this->check();

//removendo um registro
$this->delete()->from('tabela')->where('id = 2')->execute();

//Utilizando join
$this->select()->from('categoria')->join('item','item_categoria = categoria_id','INNER')->execute();
?>

Esses foram alguns métodos simples,  agora é preciso criar uma classe que herde tudo isso e escrever alguns métodos para utilizarmos.
Vejamos uma classe estendida onde iremos utilizar os recursos básicos (CRUD);

<?php

//incluindo a classe influx
require_once 'influx/influx.class.php';

//extendendo a classe
class Item extends Influx
{

//construtor
 public function __construct()
 {
 parent:: __construct();
 }

//retornando array
 public function show()
 {
 $this->select()->from( 'item' )->execute();
 //verifica se há registros
 if ( $this->check() )
 {
 //printa o array retornado
 $this->printr( $this->data );
 }
 else
 {
 //exibe mensagem caso nao haja registros
 echo $this->response;
 }
 }

//utilizando limite e offset
 public function showLimOff( $limit, $offset )
 {
 $this->select()->from( 'item' )->limit( $limit, $offset )->execute();
 if ( $this->check() )
 {
 $this->printr( $this->data );
 }
 }

//inserindo novo registro
 public function incluir( $fields, $values )
 {
 $this->insert( 'item' )->fields( $fields )->values( $values )->execute();
 }

//atualizando registro
 public function atualizar( $fields, $values, $item_id )
 {
 $this->update( 'item' )->set( $fields, $values )->where( "item_id = $item_id" )->execute();
 }

//removendo registro
 public function remover( $item_id )
 {
 $this->delete()->from( 'item' )->where( "item_id = $item_id" )->execute();
 }

//gerando uma tabela html
 public function lista()
 {
 $body = "0 results";
 $this->select()->from( 'item' )->execute();
 if ( $this->check() )
 {
 $body = "<table>";
 foreach ( $this->data as $item )
 {
 //array to object
 $obj = ( object ) $item;
 $body .= "<tr>";
 $body .= "<td>$obj->item_id</td>";
 $body .= "<td>$obj->item_desc</td>";
 $body .= "</tr>";
 }
 $body .= "<table>";
 return $body;
 }
 }

//recebendo dados via post
 public function incluirDoPost()
 {
 //verifica se há dados no post
 if ( isset( $_POST ) && !empty( $_POST ) )
 {
 //populando $this->post_fields e $this->post_values com método post2Query
 $this->post2Query( $_POST );
 //insere registro
 $this->insert( 'item' )->fields( $this->post_fields )->values( $this->post_values )->execute();
 }
 }

}
//novo objeto da classe Item
$b = new Item;
//incluindo um item
$b->incluir(array('item_desc'),array('PS2'));
//exibindo itens em array
$b->show();
//atualizando um registro
$b->atualizar( array( 'item_desc' ), array( 'XBOX' ), 4 );
//exibindo registro atualizado
$b->show();
//removendo item passando ID
$b->remover(1);
//exibindo a lista novamente
$b->show();
//gerando uma tabela HTML
echo $b->lista();
//exibindo registros utilizando limit e offset
$b->showLimOff(0,2);
?>

A configuração do acesso ao banco de dados é feita na própria classe, os dados são passados em um array, como abaixo:


//configuracao do banco
 public $config = array(
 'host' => 'localhost',
 'port' => 3306,
 'dbname' => 'dbteste',
 'user' => 'root',
 'password' => ''
 );

Para configurar o banco, basta abrir o arquivo influx.class.php e alterar os dados do array config;

Os métodos estão comentados e com exemplos breves na classe influx;

Importante: No exemplo de inserção direto do post os nomes do campos do formulário devem ser iguais aos campos da tabela;
Exemplo: na tabela existe o campo item_desc, então, no form html o input deve ter o name=”item_desc”;

É isso, dá para escrever códigos simples, coisas pequenas, só usar a criatividade…

Download dos fontes (incluindo um exemplo utilizando post e tabela exemplo)
– Classe Influx

Comments

  1. By Mateus

    Responder

Perguntas duplicadas ou cujo a resposta esteja nos comentários serão ignoradas.
Comentários com códigos serão ignorados(para isso, use o pastebin.com e informe aqui o link).
Faça sua pergunta e "aguarde" ser aprovada para aparecer no blog.
Aguarde sua resposta, ela não é em tempo real, tenha paciência!

Deixe seu comentário

%d blogueiros gostam disto: