dcblogdev/pdo-wrapper

PDO 的 CRUD 封装器

资助包维护!
dcblogdev

v2.0.2 2022-12-18 01:54 UTC

This package is auto-updated.

Last update: 2024-08-29 22:12:54 UTC


README

这个 PDO 封装器,是一个用于处理数据库的方法集合,包括选择、插入、更新和删除记录。

V2+ 已重新编写旧文档,请参阅 V1 分支

Latest Version on Packagist Total Downloads

Logo

这个 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');