2017 © Pedro Peláez
 

library datasource

Simples PDO wrap

image

danielfpedro/datasource

Simples PDO wrap

  • Tuesday, February 23, 2016
  • by danielfpedro
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Datasource

Classe escrita sobre o PDO para agilizar algumas tarefas básicas., (*1)

Instalação

composer danielfpedro/datasource

Início

use Datasource\Connection;

$config = [
    'default' => [
        'type' => 'mysql',
        'host' => 'localhost',
        'dbname' => 'blog',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ]
];

$conn = new Datasource($config['default']);

Raw Query

$artigos = $conn
    ->rawQuery('SELECT * FROM artigos')
    ->go()
    ->all('assoc');

foreach($artigos as $artigo){
    echo $artigo['titulo'];
}

Fetchs

Use all, first ou column para fazer o fetch dos dados e passe qualquer constante do PDO, assoc(Alias de PDO::FETCH_ASSOC) ou obj(Alias de PDO::FETCH_OBJ) como argumento., (*2)

$artigos = $conn
    ->rawQuery('SELECT * FROM artigos')
    ->go()
    ->all('obj');

foreach($artigos as $artigo){
    echo $artigo->titulo;
}

$artigo = $conn
    ->rawQuery('SELECT * FROM artigos')
    ->go()
    ->fisrt('obj');

echo $artigo->titulo';

Raw Query usa prepared statement, caso você use algum placeholder informe no ::go() os seus respectivos valores, exemplo:, (*3)

$conn
    ->rawQuery('SELECT * FROM artigos WHERE id = :id')
    ->go(['id' => 1]);

Insert



```php $conn ->insertInto('artigos') ->values($_POST) ->go(); ````, (*4)

Evitando ataques

Uma prática muito comum é nomear os campos de um formulário HTML com o mesmo nome dos campos do Banco de Dados e depois no insert informar apenas $_POST como valor., (*5)

Agora imagine que você tem uma tabela chamada artigos que por padrão o campo ativo é 0, ou seja, todos os artigos inseridos ficam inativos até que um revisor verifique para depois publicá-lo ou não., (*6)

Um usuáro mal itencionado pode facilmente injetar um campo de texto no formulário e nomeá-lo como ativo, logo os artigos que ele adicionar serão gravados com o valor de 1, burlando assim o valor default., (*7)

Para evitar este ataque você pode informar quais campos você deseja que sejam salvos., (*8)

<form mehotd="POST">
    <input type="text" name="titulo">
    <textarea name="texto"></textarea>
    <input type="text" name="ativo" value="1"><-- Injetado -->
</form>

```php $conn ->insertInto('artigos') ->values($_POST, ['titulo', 'texto']) // Apenas título e texto serão salvos. ->go();, (*9)


## Update ```php $conn ->update('artigos') ->set(['texto' => 'Boa noite.']) ->where('id', 1) ->go();

Delete

$conn
    ->deleteFrom('artigos')
    ->where('id', 1)
    ->go();

Obs.: O where aceita apenas uma condição, caso necessite de condições mais elaboradas rawQuery deverá ser usado., (*10)

Geters

  • ::bindValues() - Valores que foram usados no bind
  • ::query()
  • ::info() - Query e valores do Bind do último ::go()
  • ::rowsAffected() - Linhas afetadas
  • ::lastInsertId() - Último ID inserido

Helper

$data = ['titulo' => 'Olá', 'texto' => 'Bom dia.', 'dt_cadastro' => Datasource::now()];

The Versions

23/02 2016

dev-master

9999999-dev

Simples PDO wrap

  Sources   Download

MIT

The Requires

  • php ^5.4.16

 

by Daniel Pedro