jaypha/mysqli-ext

mysqli 的便利扩展

v0.1.8 2019-12-08 22:31 UTC

This package is auto-updated.

Last update: 2024-09-09 08:23:48 UTC


README

由 Jason den Dulk 编写

包含扩展 mysqli 类功能的便利函数的特质。这些函数反映了非常常见的数据库相关任务,并有助于减少代码冗余。

要求

PHP v5 或更高版本。

安装

composer require jaypha/mysqli-ext

MySqliExt

作为特质

必须添加到 mysqli 的子类中。

use MySQLiExtTrait;

作为类

$conn = new Jaypha\MySQLiExt($host, $user, $password = NULL, $database = NULL)

API

q($query)

与 mysqli::query 相同,但在出错时抛出异常。

mq($query)

与 mysqli::multi_query 相同,但在出错时抛出异常。

queryValue($query)

调用 q 并返回单个值。第一行的第一个值。

如果找到值且不为空,则返回字符串,如果值为空,则返回 NULL,如果没有找到行,则返回 false。

$n = $db->queryValue("select name from sometable where id='2'");  
echo "name is $n";

queryRow($query, $resultType = MYSQLI_ASSOC)

调用 q 并返回第一行。

如果找到行,则返回数组。如果结果类型为 MYSQLI_ASSOC,则它将是关联数组。如果没有找到行,则返回 false。

$row = $db->queryRow("select * from sometable where id='2'");  
print_r($row);

queryData($query, $keyField = NULL, $resultType = MYSQLI_ASSOC)

调用 q 并返回整个数据集。如果设置了 $keyField,则使用此列的值作为数组键。

返回行数组。每行都是一个数组。如果结果类型为 MYSQLI_ASSOC,则它将是关联数组。

如果没有找到行,则返回空数组。

$data = $db->queryData("select * from sometable");  
foreach ($data as $row) { ... }

如果键重复,则将覆盖任何现有值。

queryChunkedData($query, $limit = 1000, $resultType = MYSQLI_ASSOC)

返回 MySQLiChunkedResult 实例。

queryColumn($query)

调用 q 并返回单个列。如果 SQL 查询选择一个字段,则 queryColumn 返回包含值的数组。如果查询选择两个或更多字段,则返回一个关联数组,其中第一列的内容作为键,第二列的内容作为值。

如果没有找到行,则返回空数组。

如果键重复,则将覆盖任何现有值。

$column = $db->queryColumn("select name from sometable");  
print_r($column);  
  
$assoc = $db->queryColumn("select id,name from sometable");  
print_r($assoc);

insert($tableName, $columns, $values = NULL)

插入语句的快捷方式。有三种情况

  • 如果 $values 为 NULL,则假定 $columns 是关联数组,并使用键/值对将其插入到数据库中。
  • 如果 $columns 是数组且 $values 是数组,则使用 $columns$values 插入单行。
  • 如果 $columns 是数组且 $values 是数组的数组,则插入多行。$values 数组中的每个元素被视为一行。

返回插入 ID 值。

// insert into sometable set id=1, name='john'  
$id = $db->insert("sometable", [ "id" => 1, "name" => "john" ]);  
echo "new row ID is $id";

// insert into sometable (id,name) values (1,'john')"  
$db->insert("sometable", [ "id", "name"], [1, "john"]);

// insert into sometable (id,name) values (1,'john'), (2,'jane')  
$db->insert("sometable", [ "id", "name"], [[1, "john"], [2, "jane"]]);

update($tableName, $values, $wheres)

更新语句的快捷方式。

// update into sometable set name='john' where id=1  
$db->update("sometable", [ "name" => "john" ], [ "id" => 1 ]);

replace($tableName, $values)

替换语句的快捷方式。

// replace sometable set name='john', id=1  
$db->replace("sometable", [ "name" => "john", "id" => 1 ]);

insertUpdate($tableName, $values, $wheres)

将插入或更新。如果存在匹配给定 $wheres 的行,则将其更新为新 $values。否则,使用 $values$wheres 的组合插入新行。

在不希望删除现有行的情况下,请使用此代替替换。

// update into sometable set name='john' where id=1 (if exists)  
// insert into sometable set name='john', id=1 (if not exists)  
$db->insertUpdate("sometable", [ "name" => "john" ], [ "id" => 1 ]);

delete($tableName, $wheres = null)

删除的快捷方式。如果 $where 是整数,则将其与 id 列匹配。

如果 $wheres 为 NULL,则将截断表。

// delete from sometable where name='john'
$db->delete("sometable", [ "name" => "john" ]);

// delete from sometable where id=1
$db->delete("sometable", 1);

get($tableName, int $id)

选择列 'id' 值为 $id 的行。必须存在名为 'id' 的列。

$row = $db->get("sometable", id);  
assert(is_array($row));

set($tableName, $values, int $id = 0)

更新列 'id' 值为 id 的表行。如果没有提供 id(即零值),则执行插入操作。必须存在名为 'id' 的列。

返回行的 id。

$db->set("sometable", [ "name" => "john" ], 1);  
$id = $db->set("sometable", [ "name" => "jane" ]);

MySQLiChunkedResult

如果在任何情况下都不能有一个打开的查询,但又不能将整个查询结果加载到内存中,那么这个类可以作为折中方案。结果存储在临时表中,然后作为单独的查询分块读取。实现了 Iterator,因此可以与 foreach 一起使用。

使用方法

$mysql = new MySQLiExt(...);  
$result = new MySQLiChunkedResult($mysql, $query, $limit);  
foreach ($result as $row) { ... }  

$mysql = new MySQLiExt(...);  
$result = $mysql->queryChunkedData($query, $limit);
foreach ($result as $row) { ... }

许可

版权(C)2017 Jaypha。
在 Boost 软件许可证下分发,版本 1.0。
请参阅 https://boost.ac.cn/LICENSE_1_0.txt