amkt922/ssql

此包最新版本(0.0.1)没有提供许可证信息。

简单的数据库访问库。

0.0.1 2013-08-21 11:46 UTC

This package is not auto-updated.

Last update: 2024-09-23 13:52:28 UTC


README

Build Status

SSql是一个简单的数据库访问库。
它有两个主要功能

  • 使用方法和执行构建的SQL(简单查询)
  • 执行在应用程序外部sql文件中编写的SQL(简单SQL)。

第二个功能受到dbflute外部SQL的启发。
dbflute
关于外部SQL

SSql是一个简单的数据库访问库。它主要有两个功能。

  • 使用方法链构建和执行SQL
  • 执行sql文件中编写的SQL

第二个功能是受到dbflute外部SQL的启发。
dbflute
dbflute外部SQL

动机

在实际项目中,有时我们需要使用比ORM库提供的功能更复杂的SQL来访问数据库。
当使用ORM执行它们时,源代码通常会变得更加复杂。
我需要将它们嵌入到源代码中,而且我不知道它们在语法上是否正确。
dbflute通过一个名为外部SQL的功能解决了这些问题,然而dbflute是用Java实现的。
我一直想有一个PHP库,然后实现了具有外部SQL功能的库。

动机

在实际业务中,有时需要实现ORM所拥有的功能之外的数据库访问处理。
使用ORM的功能执行此类SQL时,通常在确认它是语法正确之前需要在实际Web应用程序中进行。
dbflute使用外部SQL解决了这样的问题。然而,dbflute是用Java实现的,而我希望有一个PHP库,所以用PHP实现了具有外部SQL功能的库。

什么是外部SQL?

外部SQL是一个执行在SQL文件中编写的SQL的功能。
您使用称为参数注释的注释编写SQL。

外部SQL是什么?

外部SQL是一个执行在文本文件中编写的SQL的功能。
它与称为参数注释的注释一起编写。

什么是参数注释?

以下是一个例子。
/*IF */、/*BEGIN */等是参数注释。

/*IF paging*/
SELECT
     id
     , name
     , status
     , created_at
-- ELSE SELECT count(id)
/*END*/
FROM
    user
/*BEGIN*/
WHERE
    /*IF name != null*/
    name like /*name*/'%to'
    /*END*/
    /*IF status != null*/
    AND status = /*statu*/1
    /*END*/
/*IF paging*/
ORDER BY id asc
/*END*/

参数注释是什么?

由于功能模仿dbflute,因此请参考dbflute外部SQL页面。
关于外部SQL

与dbflute现在的差异。

  • dbflute的嵌入参数是用$编写的,但SSql使用@。

现时点与dbflute的差异

  • dbflute的嵌入变量使用$,而SSql使用@。

如何安装SSql。

require_once SSql.php;
use SSql\SSql;

只需导入SSql.php

SSql的安装方法

require_once SSql.php;
use SSql\SSql;

只需读取SSql.php。

需求,环境

  • php >= 5.3

限制

支持Sqlite、Mysql和Postgresql,其他数据库目前不支持。

目前只支持Mysql、Sqlite和Postgresql。其他数据库目前不支持。

用法

注意:以下示例是SSql功能的一部分。
SSql中还有许多其他功能,请检查测试代码。
当然,我将来会设置文档。

设置

首先,设置$config如下所示,

$config = array('database' => array('driver' => 'Sqlite' <- or Mysql
									, 'dsn' => 'sqlite:./db/db.sqlite3'
									, 'user' => ''
									, 'password' => '')
				'sqlDir' => './sql');

简单查询

当您想执行简单SQL时,可以使用SQueryManager(简单查询)。
* 当您不需要执行复杂SQL时。

	$ssql = SSql::connect($config);
	$users = $ssql->createSQry()
					->select(array('id', 'name'))
					->from('User')
					->where(array('name like' => 'sato'))
					->execute();
  1. 使用配置连接并获取SSql对象
  2. 使用createSQry方法让它知道您使用SQueryManager
  3. 使用一些方法构建SQL,它们类似于Doctrine
  4. 执行它,并获取结果

更新、删除、插入操作几乎与上面相同。

	$ssql = SSql::connect($this->config);
	$users = $ssql->createSQry()
					->delete()
					->from('User')
					->where(array('name like' => 'sato'))
					->execute();
	$ssql->createSQry()
					->update('User')
					->set(array('name' => 'kato'))
					->where(array('id =' => 1))
					->execute();
	$ssql->createSQry()
					->insert()
					->into('User', array('id', 'name'))
					->values(array(array(6, 'tanaka')))
					->execute();

它们构建的SQL如下。

DELETE FROM User WHERE name like ?;
UPDATE User SET name = ? WHERE id = ?;
INSERT INTO User (id, name) VALUES (?, ?);

简单SQL

当您想执行复杂SQL时,可以使用SSqlManager(简单SQL)。

	$ssql = SSql::connect($this->config);
	$users = $ssql->createSSql()
						->selectList('selectUser', array('id' => 1
														, 'status' => 2
														, 'paging' => true));		
  1. 在您想要的任何地方创建sql文件。它的路径应在$config['sqlDir']中设置。
  2. 使用配置连接并获取SSql对象(与简单查询相同)
  3. 使用sql文件名(不带扩展名)和sql文件的参数执行selectList
/*IF paging*/
SELECT
     id
     , name
     , status
     , created_at
-- ELSE SELECT count(id)
/*END*/
FROM
    user
/*BEGIN*/
WHERE
    /*IF id != null*/
    id = /*id*/2
    /*END*/
	/*IF status != null*/
	AND status = /*status*/10
	/*END*/
/*IF paging*/
ORDER BY id asc
/*END*/

SSql构建以下SQL并执行。
在selectUser.sql中编写的参数,id的参数为2,status的参数为10,已进行裁剪。带有参数注释的sql文件的优点是,您可以在数据库工具(例如MySqlWorkbench)中构建和测试sql,然后使用参数控制您应用程序中的参数。

SELECT
     id
     , name
     , status
     , created_at
FROM
    user
WHERE
    id = 1
	AND status = 2
ORDER BY id asc

如果您没有传递id,则AND将被自动删除。

SELECT
     id
     , name
     , status
     , created_at
FROM
    user
WHERE
	status = 2
ORDER BY id asc

如果参数分页为false,则ELSE行有效,并删除ORDER。

SELECT count(id)
FROM
    user
WHERE
    id = 1
	AND status = 2

其他

SSql本身具有beginTransaction、commit、rollback方法。

	$ssql = SSql::connect($this->config);
	$ssql->beginTransaction();
	
	~~~~~~update data~~~~~~~~

	if ($success) {
		$ssql->commit();
	} else {
		$ssql->rollback();
	}