leongrdic/db-pdo-mysql

此包已被弃用且不再维护。作者建议使用 leven-framework/dba-mysql 包。

PDO MySQL 封装器,简化数据库通信

v3.2.1 2019-03-16 13:02 UTC

This package is auto-updated.

Last update: 2022-05-20 12:38:21 UTC


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。

请随意留下评论并分享您的想法!