leongrdic / db-pdo-mysql
Requires
- php: >=5.4.0
README
入门
使用 Composer
只需使用
php composer.phar require leongrdic/db-pdo-mysql
不使用 Composer
您可以在脚本开头简单地从 src/
文件夹中 require DB.php
文件。
require_once('DB.php');
初始化
现在您可以初始化一个 DB 对象并开始与您的数据库交互,如下所示
$options = [ 'host' => 'localhost', 'port' => 3306, 'charset' => 'utf8', 'database' => 'db', 'prefix' => 'prefix_', 'user' => 'username', 'password' => 'password', 'return_query' => false ]; $database = new \Le\DB($options);
如果可选的 return_query
键设置为 true
,则所有方法返回数组中都将添加一个额外的 'query' 键。
对象方法
get($table_name, $columns, $conditions, $additional)
参数
$table_name
是一个包含我们从中选择数据的表名的字符串。注意:如果指定了前缀,它将被附加到表名之前
$columns
可以是以下之一
- 包含要转义的列名的数组
- 包含由逗号 (
,
) 或通配符 (*
) 分隔的列列表的字符串
$conditions
指定了用于搜索行的条件,有关更多信息,请参阅 条件格式 部分
$additional:
一个可选数组,包含对查询的所有附加项;可以包含以下键
'limit'
是一个整数,表示应获取多少行;如果设置为0
或未定义,则不会有限制'offset'
定义在结果中跳过多少行;如果没有设置,默认为 0。注意:它只能在设置'limit'
时使用'order'
是一个字符串,指定结果将按什么规则排序;有关更多信息,请参阅 MySQL ORDER 手册'single'
如果设置为true
,则自动将限制设置为1
,列值对将更容易访问
返回
[ 'count' => 3, 'data' => [ [ 'column1' => 'value1', ... ], ... ] ]
如果设置 single
附加参数为 true
,则 data
索引包含直接列值对
[ 'count' => 1, 'data' => [ 'column1' => 'value1', ... ] ]
如果没有行匹配条件,则返回值始终是
[ 'count' => 0, 'data' => [] ]
示例
$result = $database->get( 'table', ['column1', 'column2'], ['condition' => 'value'], [ 'limit' => 10, 'order' => 'column2 DESC' ] ); $data = $result['data'];
获取匹配条件的行数
$result = $database->get( 'table', 'COUNT(*)' ); $count = $result['data']['COUNT(*)']
insert($table_name, $data)
参数
$table_name
是一个字符串,包含我们要插入数据的表名。注意:如果指定了前缀,它将被添加到表名之前
$data
可以是一个数组或一个字符串,包含要插入表中的行,有关更多信息,请参阅下一节
插入数据格式
它可以用以下方式之一进行格式化
['first_name' => 'John', 'last_name' => 'Doe']
[ ['first_name', 'last_name'], ['Bob', 'Mike'], ['Hills', 'Rotch'] ]
返回
返回将包含插入的列数和最后一个插入的列的ID(如果您的数据库有主键)。
[ 'count' => 1, 'id' => 54 ]
示例
$result = $database->insert( 'table', ['column' => 'value', ...] ); $id = $result['id'];
$result = $database->insert( 'table', [ ['column1', 'column2'], ['row1_value1', 'row1_value2'], ['row2_value1', 'row2_value2'] ] ); $lastid = $result['id'];
update($table_name, $data, $conditions, $additional)
参数
$table_name
是一个字符串,包含我们要更新的数据所在的表名。注意:如果指定了前缀,它将被添加到表名之前
$data
是一个数组,包含要更新的列值对,例如:['account_balance' => '150']
$conditions
指定了用于搜索行的条件,有关更多信息,请参阅 条件格式 部分
$additional:
一个可选数组,包含对查询的所有附加项;可以包含以下键
'limit'
是一个整数,表示应更新多少行;如果设置为0
或未定义,则没有限制'offset'
定义要跳过的行数;如果没有设置,默认为 0。注意:它只能在设置了'limit'
的情况下使用'order'
是一个字符串,指定受影响的行将按什么规则排序;有关更多信息,请参阅MySQL ORDER 手册'single'
如果设置为true
,则将限制设置为1
返回
['count' => 1]
示例
$result = $database->update( 'table', ['column' => 'new_value'], ['condition' => 'value'], ['single' => true] ); $count = $result['count'];
delete($table_name, $conditions, $additional)
参数
$table_name
是一个字符串,包含我们要从其中删除数据的表名。注意:如果指定了前缀,它将被添加到表名之前
$conditions
指定了用于搜索行的条件,有关更多信息,请参阅 条件格式 部分
$additional:
一个可选数组,包含对查询的所有附加项;可以包含以下键
'limit'
是一个整数,表示应删除多少行;如果设置为0
或未定义,则没有限制'offset'
定义要跳过的行数;如果没有设置,默认为 0。注意:它只能在设置了'limit'
的情况下使用'order'
是一个字符串,指定行将按什么规则排序;有关更多信息,请参阅MySQL ORDER 手册'single'
如果设置为true
,则将限制设置为1
返回
['count' => 1]
示例
$result = $database->delete( 'table', ['condition' => 'value'] ); $count = $result['count'];
schema($table_name)
获取表的列名。
参数
$table_name
是一个字符串,包含我们要获取其架构的表名。注意:如果指定了前缀,它将被添加到表名之前
返回
[ 'count' => 2, 'data' => [ [ "Field" => "column1", "Type" => "varchar(32)", "Null" => "YES", "Key" => "", "Default" => "", "Extra" => "" ], [ "Field" => "column2", "Type" => "int(10)", "Null" => "NO", "Key" => "PRI", "Default" => "", "Extra" => "" ] ] ]
示例
$result = $database->schema('table'); $columns = $result['data'];
escape($string)
返回一个带有单引号('
)转义并准备好传递给$conditions
参数的字符串。
参数
$string
是要转义并准备进行查询的字符串。
示例
$conditions = 'column != ' . $database->escape($value);
escapeName($string)
返回一个带有反引号(`
)转义并准备好传递给查询的字符串,使其适合转义列或表名。
参数
$string
是要转义并准备进行查询的列/表名字符串。
示例
$conditions = $database->escapeName($column) . " != 'value'";
transactionBegin()
开始MySQL事务,并且除非提交,否则任何进一步写入的数据都不会写入数据库。
如果已开始事务,此方法会增加并发事务的内部计数器。
commit()
如果事务处于活动状态,则提交更改并返回true
。如果事务不活跃,则返回false
。
如果已多次调用transactionBegin()
方法,则commit()
方法不会实际提交MySQL事务,直到它像前者一样被调用相同次数。
rollback()
如果事务处于活动状态,则丢弃更改并返回true
。如果事务不活跃,则返回false
。
无论调用过多少次transactionBegin()
,此方法都会丢弃MySQL事务并将内部事务计数器重置为0。
条件格式
条件参数是可选的,可以是数组或字符串。
数组
在数组的情况下,其格式必须是:['first_name' => 'John', 'last_name' => 'Doe']
注意:通过数组指定的所有条件都通过AND构造函数连接
字符串
如果您想使用其他逻辑构造函数,则条件可以作为以下格式的字符串提供:first_name='John' AND last_name='Doe'
。
注意:在构建此字符串时,不要忘记手动转义用户输入(使用escape()
和escapeName()
方法)。
错误处理 & 调试
调试可以帮助您确定使用php-db-pdo-mysql
的代码中存在的错误,如无效的参数格式或错误的数据类型。要启用调试,将类的静态变量$debug
设置为true
。
\Le\DB::$debug = true;
当开启调试时,方法可以抛出包含错误信息的Error
。此外,任何对象的新实例都会自动将return_query
设置为true
。
除了调试错误外,php-db-pdo-mysql
本身不会抛出异常。任何数据库错误或查询错误都会由PDO以异常的形式抛出。
为了确保您的操作成功完成,请将try-catch
块放置在主要方法和构造函数周围。
try { $result = $database->get('missingtable', '*'); } catch(Throwable $e){ echo 'database error occurred'; }
免责声明
我不保证此代码100%安全,其使用应由您自行负责。
如果您发现任何错误或错误,请打开工单或创建pull request。
请随意留下评论并分享您的想法!