sorskod / db
PDO 包装器。扩展 PDO 和 PDOStatement,增加有用的方法。
v1.1.0
2014-06-01 08:07 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-26 05:14:36 UTC
README
PDO 包装器扩展 PDO 和 PDOStatement 类,并添加了一些有用的方法,如插入、更新、删除等。此外,还有一个非常有用的 SQL 查询构建器。
API
由于库扩展了 PDO 驱动,因此您可以使用所有原生 PDO 方法和新增的
DB - 数据库类
insert
- 将对象或数组作为行插入到数据库表中(可选:使用预处理语句)update
- 更新数据库表中的现有行(可选:使用预处理语句)replace
- 插入或替换(使用 REPLACE 表... 语法)save
- 将数据保存到表中(方法确定是否使用插入或更新)delete
- 从数据库表中删除行count
- SELECT COUNT(*) 语句的快捷方式select
- 查询构建对象createQuery
- 创建新的查询构建器getColumnsFromTable
- 返回表的全部列作为数组
语句
fetchInto
- 将行提取到对象中(可选:仅从特定表中提取)fetchIntoFromLastRow
- 从最后一行中提取另一个对象(基于表名)fetchCollection
- 提取对象集合(自定义定义的对象或 stdClass)getColumnValue
- 从特定列获取值
查询 - 构建 SQL 查询对象
select
- SELECT 语句from
- FROM 语句where
- 添加新的 WHERE 语句。多个 WHERE 将通过 AND 连接whereIn
- 添加 WHERE IN (...) 语句whereNotIn
- 添加 WHERE NOT IN (...) 语句having
- HAVING 语句join
- 连接表语法groupBy
- GROUP BY 语句orderBy
- ORDER BY 语句limit
- LIMIT 语句getQuery
- 构建并返回查询字符串execute
- 执行查询
有关如何使用数据库查询构建器的更多信息,请参阅 如何使用数据库查询构建器。
用法示例
创建数据库实例
$db = new database\DB("mysql:host=localhost;dbname=YOUR_DB_NAME", "YOUR_DB_USERNAME", "YOUR_DB_PASSWORD");
Select
执行查询并获取 User 对象
class User {}
$user_id = 1;
$sql = "SELECT * FROM users WHERE user_id = ? AND is_active = ?";
$user = $db->executeQuery($sql, array($user_id, 1))
->fetchInto(new User); // or ->fetchObject("User") as in standard PDO driver
如果您需要 User 对象的集合,您可以使用 fetchCollection
方法
$users = $db->executeQuery($sql, array($user_id, 1))
->fetchCollection(new User); // or ->fetchCollection("User");
更复杂,使用查询构建器。您可以构建 'native' 对象结构。例如,您可以获取 Post 对象的集合,每个 Post 对象可能都有一个属性 $author
,它是 User 对象的一个实例
class User
{
/**
* Get user's first and last name
*
* @return string
*/
function getName() {
return $this->first_name . " ". $this->last_name;
}
}
class Post
{
/**
* @var User
*/
public $author;
}
// Library need FETCH_TABLE_NAMES option for mapping class names and table names
$db->setFetchTableNames(1);
$sql = $db->select("p.*, u.*")
->from("posts p")
->join("INNER JOIN users u USING(user_id)")
->where("u.user_id = ?", $user_id)
->orderBy("p.title");
$stmt = $sql->execute();
/* @var Post[] $post_collection */
$post_collection = array();
// Fetching data into Post object from posts table (p is alias)
while($post = $stmt->fetchInto(new Post, "p")) {
// fetch User object from users table (u is alias)
$post->author = $stmt->fetchIntoFromLastRow(new User, "u");
$post_collection[] = $post;
}
// You can send $post_collection from model to view in your controller, so here is usage in view
foreach($post_collection as $post) {
echo $post->author->getName();
}
Insert
库有 insert
方法,用于轻松地将 数组或对象 作为行插入到数据库表中。请注意,所有其他与列名不匹配的属性或元素都将被忽略。
$data = array(
"username" => "User 1234",
"email" => "user@example.com",
"mtime" => time()
);
$db->insert("users", $data);
使用预处理语句插入
insert()
方法的第三个参数是 "unique prepared stmt key"。每个具有该键的插入都将使用相同的预处理语句。
foreach($data_array as $data) {
$db->insert("users", $data, "unique_stmt_key");
}
Update
一些更新语句的示例
$user_id = 1;
$db->update("users", $data, "user_id = ?", $user_id);
$db->update("users", $data, "user_id = ? AND email = ?", array(1, "user@example.com"));
保存数据
自动确定 INSERT 或 UPDATE。如果 $data['user_id'] 存在,则将执行 UPDATE,否则将执行 INSERT。
$db->save("users", $data, "user_id"); // user_id is name of PRIMARY column
更多示例
// Delete row in table
// some as $db->exec("DELETE FROM users WHERE user_id = 1");
$db->delete("users", "user_id = ?", $user_id);
// Count rows in table
$count = $db->count("users");
/* @var User[] $users Collection of User objects */
$users = $db->executeQuery("SELECT * FROM users")->fetchCollection(new User);