dcblogdev / pdo-wrapper
PDO 的 CRUD 封装器
Requires
- php: >=7.2
README
这个 PDO 封装器,是一个用于处理数据库的方法集合,包括选择、插入、更新和删除记录。
V2+ 已重新编写旧文档,请参阅 V1 分支
这个 PDO 封装器,是一个用于处理数据库的方法集合,包括选择、插入、更新和删除记录。
V2+ 已重新编写旧文档,请参阅 V1 分支
从 V1 升级
版本 2 现已命名空间为 Dcblogdev
而不是 Daveismyname
此外,已删除 get()
和 select()
方法。
而不是 ::get(),使用 new Database($args)
创建类的实例
选择已被替换为 ->rows()
和 ->row()
或 ->run()
快速参考
//create table $db->raw("CREATE TABLE demo (id int auto_increment primary key, name varchar(255))"); //use PDO directly $db->getPdo()->query('Select username FROM users')->fetchAll(); //use run to query and chain methods $db->run("SELECT * FROM users")->fetchAll(); $db->run("SELECT * FROM users")->fetch(); $db->run("SELECT * FROM users WHERE id = ?", [$id])->fetch(); //select using array instead of object $db->run("SELECT * FROM users")->fetch(PDO::FETCH_ASSOC); //get by id $db->getById('users', 2); //get all rows $db->rows("SELECT title FROM posts"); //get all rows with placeholders $db->rows("SELECT title FROM posts WHERE user_id = ?", [$user_id]); //get single row $db->row("SELECT title FROM posts"); //get single row with placeholders $db->row("SELECT title FROM posts WHERE user_id = ?", [$user_id]); //count $db->count("SELECT id FROM posts"); $db->count("SELECT id FROM posts WHERE category_id = ?", [$category_id]); //insert $id = $db->insert('users', ['username' => 'Dave', 'role' => 'Admin']); //last inserted id $db->lastInsertId()(); //update $db->update('users', ['role' => 'Editor'], ['id' => 3]); //delete from table with a where claus and a limit of 1 record $db->delete('posts', ['type_id' => 'draft'], $limit = 1); //delete from table with a where claus and a limit of 10 record $db->delete('posts', ['type_id' => 'draft'], $limit = 10); //delete all from table with a where claus and a limit of 10 record $db->delete('posts', ['type_id' => 'draft'], null); //delete all from table $db->deleteAll('posts'); //delete by id from table $db->deleteById('posts', 2); //delete by ids from table $db->deleteById('posts', '2,4,7'); //truncate table $db->truncate('posts');
安装
使用 composer 在终端中键入以下内容以包含仓库
composer require dcblogdev/pdo-wrapper
设置数据库凭证。最后,创建类的实例。
use Dcblogdev\PdoWrapper\Database; // make a connection to mysql here $options = [ //required 'username' => '', 'database' => '', //optional 'password' => '', 'type' => 'mysql', 'charset' => 'utf8', 'host' => 'dev', 'port' => '3309' ]; $db = new Database($options);
访问 PDO 您可以调用 getPdo() 直接获取 PDO
$db->getPdo()
这允许进行链式调用
$db->getPdo()->query($sql)->fetch();
查询
所有查询都使用预处理语句,调用 ->run() 返回一个可以链式调用的 PDO 选项
选择多条记录
$db->run("select * FROM users")->fetchAll();
选择单条记录
$db->run("select * FROM users")->fetch();
使用 ->rows 选择多条记录
$db->rows("select * FROM table");
使用 ->row 选择单条记录
$db->row("select * FROM table");
要基于用户数据选择记录而不是直接将数据传递给查询,请使用预处理语句,这更安全并阻止任何 SQL 注入尝试。
命名占位符
$db->row("select username FROM users WHERE id = :id and email = :email", ['id' => 1, ':email' => 'someone@domain.com']);
匿名占位符
$db->row("select username FROM users WHERE id = ? and email = ?", [1, 'someone@domain.com']);
上述查询将返回与 id 和 email 匹配的用户表中的用户名。id 和 email 分别作为一个数组传递。
而不是直接将 id 和 email 传递给查询,请使用占位符 :id 和 :email(或 ? 也可以使用),然后传递一个数组,数组的键与占位符匹配并绑定,因此数据库将获取查询和绑定数据。
查询返回的数据将作为对象返回,这可以通过传递包含 PDO::FETCH_ASSOC 的第三个参数来更改。
要使用对象,请遍历它,一个典型的例子
$rows = $db->rows("firstName, lastName FROM username ORDER BY firstName, lastName"); foreach ($rows as $row) { echo "<p>$row->firstName $row->lastName</p>"; }
选择单条记录
使用 row() 将只返回一个结果。像 rows 一样,它接受作为第二个参数传递的数组中的参数。
命名占位符
$db->row("column FROM table where id=:id", ['id' => 23]);
匿名占位符
$db->row("column FROM table where id=?", [23]);
另一种通过调用 ->getById 通过表和 id 选择单条记录的方式
$db->getById('users', $id);
原始查询
原始查询是一个不通过预处理语句运行的查询,将直接执行传递的查询。当创建表时很有用。
$db->raw("CREATE TABLE IF NOT EXISTS users ( id INT(11) NOT NULL AUTO_INCREMENT, firstName VARCHAR(255) NOT NULL, lastnName VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (id))" );
计数
要计数记录,请调用 count 方法。此方法期望表名和列名(可选)。
$db->count('users');
如果表没有 id 列
$db->count('users', 'user_id');
插入
通过调用 insert 方法插入数据,它期望表名后跟一个要插入到数据库中的键值数组。
$data = [ 'firstName' => 'Joe', 'lastnName' => 'Smith', 'email' => 'someone@domain.com' ]; $db->insert('users', $data);
插入自动返回最后插入的 id,通过返回 'lastInsertId' 来收集 id
$id = $db->insert('users', $data);
更新
要更新现有记录,请调用 update 方法。此方法期望表、要更新的数据数组以及包含 where 条件的第二个数组。
$data = [ 'firstName' => 'Joe', 'lastnName' => 'Smith', 'email' => 'someone@domain.com' ]; $where = ['id' => 2]; $db->update('users', $data, $where);
或
$update = [ 'data' => [ 'firstName' => 'Joe', 'lastnName' => 'Smith', 'email' => 'someone@domain.com' ], 'where' => [ 'id' => 2 ] ]; $db->update('users', $update['data'], $update['where']);
删除
要删除记录,请调用 delete 方法。此方法期望表名和包含 where 条件的数组。
$where = ['id' => 2]; $db->delete('users', $where);
这将删除单个记录,通过第三个参数包含要限制的数量来设置限制,或通过传递null作为第三个参数来移除限制。
$db->delete('users', $where, 10); //delete 10 records matcing the where $db->delete('users', $where, null); //delete all records matching the where
删除所有
删除给定表的全部记录
$db->deleteAll('users');
按ID删除
通过表和ID删除记录
$db->deleteById('users', $id);
删除多个IN
删除多个记录,其中ID位于特定列中,这使用WHERE id IN (4,5,6)
$db->deleteByIds('users', 'id', '4,5,6');
截断
要清空表中的所有内容,请调用截断方法。只传递表名。
$db->truncate('users');