montyhusor/pqbuilder

一个简单的MySQL PHP查询构建器,旨在简化Web开发中的数据库交互

v0.5.2 2024-04-10 01:47 UTC

This package is auto-updated.

Last update: 2024-09-10 03:05:59 UTC


README

PQbuilder 是一个为MySQL设计的PHP查询构建库,使开发者能够通过链式调用的方式构建SQL查询。 PQbuilder是一个为MySQL设计的PHP查询构建库,允许开发者通过链式调用的方式构建SQL查询。

主要特性

  • 基本CRUD操作 - Basic CRUD Operations:支持SELECT、INSERT、UPDATE、DELETE查询。- 支持 SELECT、INSERT、UPDATE 和 DELETE 查询。
  • 链式调用 - Chainable Calls:支持链式调用。- 支持 链式调用。
  • 自动参数绑定 - Automatic Parameter Binding:减少SQL注入的风险。- 减少SQL注入风险。
  • 条件构建 - Condition Building:支持IN语句、嵌套逻辑和复杂条件构建。- 支持 IN 语句、嵌套逻辑和复杂条件构建。
  • 事务处理 - Transaction Management:提供事务开始、提交和回滚的方法。- 提供事务开始、提交和回滚方法。
  • 数据抓取方法 - Data Fetching Methods:提供qfetchAllqfetchFqfetchColumnqfetchObject方法。- 提供 qfetchAllqfetchFqfetchColumnqfetchObject 方法。

安装 - Installation

使用Composer进行安装:

composer require montyhusor/pqbuilder

示例 - Examples

插入 - INSERT

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$config = [
    "host" => "host",
    "db" => "database",
    "user" => "username",
    "pass" => "password",
    "options" => [],
];

$eor = new Executor($config);

$insert = op::qinsert("testTable_library")
    ->columns(["userID", "borrower", "bookname"])
    ->values(["10001", "A1", "phpMyAdmin Starter"])
    ->values(["10002", "A2", "PHP is Standing Tall"]);

$eor->qexecute($insert);
echo "Affected rows: " . $eor->qrowCount();

更新 - UPDATE

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$update = op::qupdate("testTable_library")
    ->set("bookname", "PHP Cookbook")
    ->where("borrower", "=", "A1");

$eor->qexecute($update);
echo "Affected rows: " . $eor->qrowCount();

删除 - DELETE

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$delete = op::qdelete("testTable_library")
    ->where("bookname", "=", "PHP Cookbook");

$eor->qexecute($delete);
echo "Affected rows: " . $eor->qrowCount();

查询 - SELECT

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$select = op::qselect(["id", "userID", "borrower", "bookname"], "testTable_library")
    ->where("userID", "IN", [10001, 10002, 10003]);

// 获取所有记录
$records = $eor->qfetchAll($select);

// 获取第一条记录
$firstRecord = $eor->qfetchF($select);

// 获取单列的第一个值
$ColumnfirstV = $eor->qfetchColumn($select, 3);

使用pa()endPa()进行嵌套逻辑的查询 - 使用pa()endPa()进行嵌套逻辑查询

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$select = op::qselect(["id", "userID", "borrower", "bookname"], "testTable_library")
    ->where("userID", "=", 10002)
    ->pa()
        ->where("bookname", "=", "PHP Cookbook")
        ->orWhere("bookname", "=", "PHP is Standing Tall")
    ->endPa();

$records = $eor->qfetchAll($select);

使用qfetchObject获取记录作为对象 - 使用qfetchObject获取记录作为对象

定义Book类:

class Book
{
    public $bookname;
    public $greeting;

    public function __construct($greeting = "Hi")
    {
        $this->greeting = $greeting;
    }

    public function intro()
    {
        return $this->greeting . " This book is called 《" . $this->bookname . "";
    }
}

获取Book对象:

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$selectBook = op::qselect(["bookname"], "testTable_library");
$bookObject = $eor->qfetchObject($selectBook, Book::class, ["Welcome to the library!"]);

echo $bookObject->intro();

使用groupBy(), orderBy(), having(), limit() - 使用groupBy()orderBy()having()limit()

use PQbuilder\Factory as op;
use PQbuilder\Executor;

$eor = new Executor($config);

$selectX = op::qselect(
        ["bookname", "COUNT(id) AS count"],
        "testTable_library"
    )
        ->groupBy(["bookname"])
        ->having("COUNT(id)", ">", 1)
        ->orderBy("count", "DESC")
        ->limit(3);

$records = $eor->qfetchAll($selectX);
echo "<pre>";
print_r($records);

注意事项 - Considerations

  • 在构建DELETE和UPDATE查询时,请确保不在没有明确条件的情况下直接使用pa()endPa(),以防止执行无条件的全表操作并导致数据丢失。
  • 当开始一个新的逻辑组合时,使用的第一个where()orWhere()方法都会产生相同的效果。因此,在开始新的逻辑组合时直接使用where就行。
  • 类似地,对于pa()方法,当你开始一个新的条件组合时,无论是pa()还是pa("OR"),如果它是第一个使用的,那么效果是相同的,因为它标志着一个新的逻辑分支的开始。
  • 请注意,虽然PQbuilder旨在简化SQL查询构建过程,并提供了基础的CRUD操作及一些高级功能,但它并不覆盖所有的SQL查询操作以及一些更复杂的数据库操作,PQbuilder还有待完善。
  • 当构建DELETE和UPDATE查询时,请确保不在没有明确条件的情况下直接使用pa()endPa(),以防止执行无条件的全表操作并导致数据丢失。
  • 当开始一个新的逻辑组合时,使用的第一个where()orWhere()方法都会产生相同的效果。因此,在开始新的逻辑组合时直接使用where即可。
  • 请注意,虽然PQbuilder旨在简化SQL查询构建过程,提供基本的CRUD操作和一些高级功能,但它并不涵盖所有SQL查询操作或一些更复杂的数据库交互。 PQbuilder仍处于开发中。