aviat / query
数据库查询构建器和抽象层
v4.1.0
2023-03-17 20:34 UTC
Requires
- php: >=8.1
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: ^10.0.16
README
查询构建器/数据库抽象层,使用预处理语句提高安全性。
要求
- 您希望使用的数据库的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
查询执行方法 get
、getWhere
、insert
、insertBatch
、update
和 delete
返回一个原生的 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
方法也可以接受一个数组作为参数,而不是设置单个值。