zyxus / db
MySQL PDO 的 PHP 封装器
dev-master
2020-05-15 17:28 UTC
Requires
- php: >=5.6.0
- ext-pdo: *
This package is auto-updated.
Last update: 2024-09-16 04:13:28 UTC
README
这是一个PDO的简单封装类。它最初是为内部用途开发的,目的是为了简化PDO的使用。查询构建器扩展了PDO的使用功能。
安装
通过 Composer 安装。
$ composer require zyxus/db
目录
使用
DB::query()
如果查询执行成功返回 true
,如果没有返回任何结果返回 false
。如果发生错误,将抛出异常,并输出脚本和错误行以及错误描述。
bool DB::query($query);
rowCount()
返回被查询处理行的数量
$count = DB::query($query)->rowCount();
fetch()
返回查询结果的一行
$count = DB::query($query)->fetch();
fetchAll()
返回查询结果的全部行
$count = DB::query($query)->fetch();
lastInsertId()
返回由查询插入的最后一条记录的ID
$count = DB::instance()->lastInsertId();
准备好的语句(prepared statements)
使用准备好的语句可以增强对SQL注入的保护。
准备好的语句是一个预先编译的SQL表达式,可以通过发送不同的数据集到服务器多次执行。另一个优点是,无法通过占位符的数据进行SQL注入。
无名称占位符(?)
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = ? AND `field3` = ?"; $params = [100, 'Y']; $data = DB::query($query, params)->fetch();
命名占位符(:placeholder_name)
$query = "SELECT `field1`, `field2` FROM `table` WHERE `id` = :id AND `field3` = :field3"; $params = [ ':id' => 100, ':field3' => 'Y', ]; $data = DB::query($query, params)->fetch();
查询结果的选择 SELECT
选择一行 fetch()
$query = "SELECT `field` FROM `table` WHERE `id` = :id"; $articul = DB::query($query, [':id' => 2797])->fetch(); // если не указан PDO::FETCH_NUM то вернется ассоциативный массив
返回
[ [id] => 1234 [name] => Название поля ] // или если в fetch(PDO::FETCH_NUM) то вернется нумерованный массив [ [0] => 1234 [1] => Название поля ]
选择查询的所有结果 fetchAll()
$data = DB::query($query)->fetchAll();
选择返回索引的FETCH_STYLE
选择关联数组数据
$data = DB::query($query)->fetchAll(PDO::FETCH_ASSOC);
返回
[ [0] => Array ( [id] => 1234 [name] => Название поля 1 ) [1] => Array ( [id] => 1235 [name] => Название поля 2 ) [2] => Array ( [id] => 1236 [name] => Название поля 3 ) ]
选择编号数组数据
$data = DB::query($query)->fetchAll(PDO::FETCH_NUM);
返回
[ [0] => Array ( [0] => 1234 [1] => Название поля 1 ) [1] => Array ( [0] => 1235 [1] => Название поля 2 ) [2] => Array ( [0] => 1236 [1] => Название поля 3 ) ]
检查查询结果
$query = "SELECT `id`, `name` FROM `table` WHERE `id` = ?"; if (!$array = DB::query($query, [$id])->fetchAll()) { echo "Нет записей"; }
$query = "SELECT `name` FROM `table` WHERE `id` = ?"; $result = DB::query($query, [$articul]); if ($result->rowCount() > 0) { $row = $result->fetch(); echo $row['name']; } else { echo "Empty results"; }
将行插入到表中 INSERT
$query = " INSERT INTO `table` ( `id`, `title` ) VALUES ( NULL, :title ); "; $params = array( ':title' => $title, ); DB::query($query, $params);
INSERT ON DUPLICATE KEY UPDATE 语法
INSERT INTO `table` SET `field1` = :field1, `field2` = :field2 ON DUPLICATE KEY UPDATE `field2` = VALUES(`field2`)
查询构建器
示例
$menu = DB::table('table') ->fields('table.id, table.name, table_parent.name as parent') ->limit(2, 2) ->order('table.id'); $menu->join('table', 'table_parent.id', 'table.parent_id', null, 'table_parent'); $menu->where('table.articul', '', '<>'); $products = $menu->exec();
table($table)
设置表
$query = DB::table('table');
fields($fields)
指定表字段
$query->fields('table.field1, table.field2');
join($table, $field1, $field2, $condition = ' = ', $alias = '')
$query->join('table', 'table.id', 'table.parent_id', null, 'table_alias');
innerJoin($table, $field1, $field2, $condition = ' = ', $alias = '')
与 join
相同。
where($field, $value, $condition = ' = ', $combine_condition = 'AND')
$query->where('table.title', '', '<>');
whereRaw($where)
$query->whereRaw('id = :id');
order($field, $direction = 'ASC')
根据字段 $field
进行排序,排序方向为 $direction
$query->order('id');
limit($limit, $from = '0')
从 $from
开始选择 $limit
条记录
$query->limit(10);
exec()
执行预编译的查询
$products = $query->exec();