aviat/query

数据库查询构建器和抽象层

安装数量: 3,279

依赖者: 2

建议者: 0

安全性: 0

星标: 8

关注者: 3

分支: 2

语言:HTML

v4.1.0 2023-03-17 20:34 UTC

This package is auto-updated.

Last update: 2024-09-17 23:58:37 UTC


README

查询构建器/数据库抽象层,使用预处理语句提高安全性。

Latest Stable Version Total Downloads Latest Unstable Version

要求

  • 您希望使用的数据库的PDO扩展
  • PHP 8.1 或更高版本

支持的数据库

  • MySQL 5+ / MariaDB
  • PostgreSQL 8.4+
  • SQLite

将Query包含到您的应用程序中

  • 通过composer安装并包含 vendor/autoload.php

连接

创建一个类似以下的连接数组或对象

<?php

$params = array(
	'type' => 'mysql', // mysql, pgsql, sqlite
	'host' => 'localhost', // address or socket
	'user' => 'root',
	'pass' => '',
	'port' => '3306',
	'database' => 'test_db',

	// Only required for
	// SQLite
	'file' => '/path/to/db/file',

	// Optional parameters
	'prefix' => 'tbl_', 	// Database table prefix
	'alias' => 'old' 		// Connection name for the Query function
);

$db = Query($params);

所需的参数取决于数据库。

查询函数

您可以使用 Query() 函数作为最后一个连接的数据库的引用。例如。

<?php
Query()->get('table_name');

// or
$result = Query()->query($sql);

如果参数中设置了 alias 键,您可以引用特定的数据库连接

<?php

// Set the alias in the connection parameters
$params['alias'] = 'old';

// Connect to the legacy database
Query('old')->query($sql);

运行查询

Query 基于 CodeIgniter 的 Query Builder 类。但是,它具有驼峰命名方法,并且不实现缓存方法。有关特定的查询构建器方法,请参阅 类文档

查询构建器对象还提供了其他不直接参与构建查询的数据库方法。可用的方法取决于数据库,但常见的方法在 这里 文档中。

您还可以手动运行查询。

要运行预处理语句,请调用 $db->prepareExecute($sql, $params)

要运行普通查询,请调用 $db->query($sql)

检索结果

一个中等复杂查询的示例

<?php
$query = $db->select('id, key as k, val')
	->from('table t')
	->where('k >', 3)
	->orWhere('id !=', 5)
	->orderBy('val', 'DESC')
	->limit(3, 1)
	->get();

这将生成一个类似于(这是 PostgreSQL 数据库的输出)的查询

SELECT "id", "key" AS "k", "val"
FROM "table" "t"
WHERE "k" > ?
OR "id" != ?
ORDER BY "val" DESC
LIMIT 3 OFFSET 1

查询执行方法 getgetWhereinsertinsertBatchupdatedelete 返回一个原生的 PDOStatement 对象。要检索查询的结果,请使用 PDOStatement 方法 fetch 和/或 fetchAll

<?php
$query = $db->get('table_name');

$results = $query->fetchAll(PDO::FETCH_ASSOC);

插入/更新

插入查询的示例

<?php
$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')
	->insert('table');

更新查询的示例

<?php
$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')
	->update('table');

set 方法也可以接受一个数组作为参数,而不是设置单个值。