danielfpedro / datasource
Simples PDO wrap
Requires
- php: ^5.4.16
This package is not auto-updated.
Last update: 2024-11-13 18:08:58 UTC
README
Classe escrita sobre o PDO
para agilizar algumas tarefas básicas.
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
.
$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:
$conn ->rawQuery('SELECT * FROM artigos WHERE id = :id') ->go(['id' => 1]);
Insert
<form mehotd="POST"> <input type="text" name="titulo"> <textarea name="texto"></textarea> </form>
$conn ->insertInto('artigos') ->values($_POST) ->go();
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.
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.
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.
Para evitar este ataque você pode informar quais campos você deseja que sejam salvos.
<form mehotd="POST"> <input type="text" name="titulo"> <textarea name="texto"></textarea> <input type="text" name="ativo" value="1"><-- Injetado --> </form>
$conn ->insertInto('artigos') ->values($_POST, ['titulo', 'texto']) // Apenas título e texto serão salvos. ->go();
Update
$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.
Geters
- ::bindValues() - Valores que foram usados no
bind
- ::query()
- ::info() -
Query
e valores doBind
do último::go()
- ::rowsAffected() - Linhas afetadas
- ::lastInsertId() - Último
ID
inserido
Helper
$data = ['titulo' => 'Olá', 'texto' => 'Bom dia.', 'dt_cadastro' => Datasource::now()];