danifelpedro / datasource
简单的 PDO 包装器
dev-master
2016-02-23 19:52 UTC
Requires
- php: ^5.4.16
This package is not auto-updated.
Last update: 2024-09-18 17:33:21 UTC
README
关于 PDO
的类,旨在简化一些基本任务。
安装
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']; }
获取
使用 all
、first
或 column
来执行数据获取操作,并将任何 PDO
的 constante
(别名 PDO::FETCH_ASSOC
)、assoc
或 obj
(别名 PDO::FETCH_OBJ
)作为参数传递。
$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';
原始查询 使用 prepared statement
,如果您使用任何 placeholder
,请在使用 ::go()
时提供相应的值,例如:
$conn ->rawQuery('SELECT * FROM artigos WHERE id = :id') ->go(['id' => 1]);
插入
<form mehotd="POST"> <input type="text" name="titulo"> <textarea name="texto"></textarea> </form>
$conn ->insertInto('artigos') ->values($_POST) ->go();
防止攻击
一个非常常见的做法是将 HTML 表单字段的名称与数据库字段名称相同,然后在 insert
中仅将 $_POST
作为值提供。
现在假设您有一个名为 artigos
的表,默认情况下字段 ativo
的值为 0
,即所有插入的文章都处于非活动状态,直到审稿人检查并决定是否发布。
一个恶意用户可以轻易地在表单中注入一个文本字段并命名为 ativo
,因此他添加的文章将被保存为 1
,从而绕过默认值。
为了防止这种攻击,您可以指定要保存哪些字段。
<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();
更新
$conn ->update('artigos') ->set(['texto' => 'Boa noite.']) ->where('id', 1) ->go();
删除
$conn ->deleteFrom('artigos') ->where('id', 1) ->go();
注意: where
仅接受一个条件,如果您需要更复杂的条件,则必须使用 rawQuery
。
获取器
- ::bindValues() - 用于
bind
的值 - ::query()
- ::info() - 最后一次
::go()
的Query
和Bind
值 - ::rowsAffected() - 影响的行数
- ::lastInsertId() - 最后插入的
ID
助手
$data = ['titulo' => 'Olá', 'texto' => 'Bom dia.', 'dt_cadastro' => Datasource::now()];