Wallogit.com
2017 © Pedro Peláez
Simples PDO wrap
Classe escrita sobre o PDO para agilizar algumas tarefas básicas., (*1)
composer danielfpedro/datasource
use Datasource\Connection;
$config = [
'default' => [
'type' => 'mysql',
'host' => 'localhost',
'dbname' => 'blog',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]
];
$conn = new Datasource($config['default']);
$artigos = $conn
->rawQuery('SELECT * FROM artigos')
->go()
->all('assoc');
foreach($artigos as $artigo){
echo $artigo['titulo'];
}
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]);
```php $conn ->insertInto('artigos') ->values($_POST) ->go(); ````, (*4)
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();
$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)
bind
Query e valores do Bind do último ::go()
ID inserido$data = ['titulo' => 'Olá', 'texto' => 'Bom dia.', 'dt_cadastro' => Datasource::now()];