amkt922 / ssql
简单的数据库访问库。
This package is not auto-updated.
Last update: 2024-09-23 13:52:28 UTC
README
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();
- 使用配置连接并获取SSql对象
- 使用createSQry方法让它知道您使用SQueryManager
- 使用一些方法构建SQL,它们类似于Doctrine
- 执行它,并获取结果
更新、删除、插入操作几乎与上面相同。
$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));
- 在您想要的任何地方创建sql文件。它的路径应在$config['sqlDir']中设置。
- 使用配置连接并获取SSql对象(与简单查询相同)
- 使用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(); }