aviat4ion/query

此软件包已被弃用且不再维护。作者建议使用 aviat/query 软件包。

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

v2.5.1 2015-07-31 14:56 UTC

This package is auto-updated.

Last update: 2019-02-20 17:14:34 UTC


README

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

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License

要求

  • 您要使用的数据库的 PDO 扩展(除非是 Firebird,在这种情况下需要 interbase 扩展)
  • 支持的 PHP 版本(较旧版本可能也能工作,但不予支持)

支持的数据库

  • Firebird(通过 interbase 扩展)
  • MySQL
  • PostgreSQL
  • SQLite

将 Query 包集成到您的应用程序中

  • 通过 composer 安装并包含 vendor/autoload.php
  • 仅包含 autoload.php 文件。这将自动加载当前 PHP 安装支持的类。

连接

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

<?php

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

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

	// Optional paramaters
	'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 类相同的接口。但是,它不实现 update_batch 或缓存方法。有关特定的查询构建器方法,请参阅 类文档

您也可以手动运行查询。

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

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

检索结果

一个中等复杂查询的示例

<?php
$query = $db->select('id, key as k, val')
	->from('table t')
	->where('k >', 3)
	->or_where('id !=' 5)
	->order_by('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

要检索查询结果,请使用 PDO 方法 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 方法也可以将数组作为参数,而不是设置单个值。