PHPackages                             danielfpedro/datasource - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. danielfpedro/datasource

ActiveLibrary[Database &amp; ORM](/categories/database)

danielfpedro/datasource
=======================

Simples PDO wrap

01PHP

Since Feb 23Pushed 10y ago1 watchersCompare

[ Source](https://github.com/danielfpedro/datasource)[ Packagist](https://packagist.org/packages/danielfpedro/datasource)[ RSS](/packages/danielfpedro-datasource/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

Datasource
==========

[](#datasource)

Classe escrita sobre o `PDO` para agilizar algumas tarefas básicas.

Instalação
----------

[](#instalação)

```
composer danielfpedro/datasource
```

Início
------

[](#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
---------

[](#raw-query)

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

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

Fetchs
------

[](#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

[](#insert)

```

```

```
$conn
	->insertInto('artigos')
	->values($_POST)
	->go();
```

Evitando ataques
----------------

[](#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.

```

```

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

Update
------

[](#update)

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

Delete
------

[](#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
------

[](#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
------

[](#helper)

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

###  Health Score

19

—

LowBetter than 9% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity1

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/4269083?v=4)[danielfpedro](/maintainers/danielfpedro)[@danielfpedro](https://github.com/danielfpedro)

---

Top Contributors

[![ag-secret](https://avatars.githubusercontent.com/u/10434389?v=4)](https://github.com/ag-secret "ag-secret (12 commits)")

### Embed Badge

![Health badge](/badges/danielfpedro-datasource/health.svg)

```
[![Health](https://phpackages.com/badges/danielfpedro-datasource/health.svg)](https://phpackages.com/packages/danielfpedro-datasource)
```

###  Alternatives

[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k117.2M117](/packages/jdorn-sql-formatter)[propel/propel1

Propel is an open-source Object-Relational Mapping (ORM) for PHP5.

8351.6M87](/packages/propel-propel1)[jfelder/oracledb

Oracle DB driver for Laravel

11518.4k](/packages/jfelder-oracledb)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
