PHP-MySQL模板引擎,主要针对开发者数据处理的时候使用,可以迅速编写数据处理脚本

项目地址

https://github.com/1107012776/php-enjoy-sql-engine

介绍

PHP Enjoy Sql Engine, MySQL数据库模板引擎,主要针对开发者数据处理的时候使用,可以迅速编写数据处理脚本。
优点:可以把sql和php代码分离,php代码专注于处理业务逻辑。

安装

composer require lys/php-enjoy-sql-engine

入门 (具体查看tests目录)

创建数据库,创建表

CREATE TABLE `order` (
  `id` int NOT NULL AUTO_INCREMENT,
  `state` tinyint DEFAULT '0',
  `product_id` int unsigned DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT '',
  `nickname` varchar(255) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

创建一个模板 tplFileName.sql

#namespace("order")
    #sql("insert")
        #remark("注释:插入")
        insert into `order`(`product_id`, `state`)
        values (:product_id, :state);
    #end
    #sql("list")
        #remark("注释:查询列表")
        select *
        from `order`
        where product_id = :product_id;
    #end
    #sql("view")
        #remark("注释:查询单个")
        select *
        from `order`
        where id = :id;
    #end
    #sql("update")
        #remark("注释:更新")
        update `order`
        set state = :update_state
        where id = :id;
    #end
    #sql("delete")
        #remark("注释:删除")
        delete
        from `order`
        where product_id = :product_id;
    #end
#end("order")
#namespace("user")
    #sql("insert")
        #remark("注释:插入")
        insert into `user`(`username`, `nickname`)
        values (:username, :nickname);
    #end
    #sql("list")
        #remark("注释:查询列表")
        select *
        from `user`
        where username = :username;
    #end
    #sql("where_list")
        #remark("注释:查询列表(不安全,通过占位替换赋值变量给模板)")
        select *
        from `user`
        where ${where};
    #end
    #sql("delete")
        #remark("注释:删除")
        delete
        from `user`
        where username = :username;
    #end
#end("user")

代码实战

namespace SqlTplEngine\Test;

$file_load_path = __DIR__ . '/../../../autoload.php';
if (file_exists($file_load_path)) {
    require_once $file_load_path;
} else {
    $vendor = __DIR__ . '/../vendor/autoload.php';
    require_once $vendor;
}

use PHPUnit\Framework\TestCase;
use SqlTplEngine\Core\SPDO;


class DemoTest extends TestCase
{
    public function getPdo()
    {
        $dbms = 'mysql';     //数据库类型
        $host = '127.0.0.1'; //数据库主机名
        $dbName = 'sql_tpl_engine';    //使用的数据库名称
        $user = 'root';      //数据库连接用户名
        $pass = '123456';          //对应的密码
        $dsn = "$dbms:host=$host;dbname=$dbName;port=3306;charset=utf8mb4";
        $pdo = SPDO::build($dsn, $user, $pass);
        $pdo->setLoadTplBasePath(dirname(__FILE__) . '/tplSql');
        return $pdo;
    }

    public function testStart()
    {
        $pdo = $this->getPdo();
        //insert插入
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.order.insert'), [
            'product_id' => 1,
            'state' => 2
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);

        $insertId = $pdo->lastInsertId();
        //查询单个
        $info = $pdo->getOne($pdo->loadTplParse('tplFileName.order.view'), [
            'id' => $insertId
        ]);
        $this->assertEquals(!empty($info), true);

        //列表查询
        $list = $pdo->getAll($pdo->loadTplParse('tplFileName.order.list'), [
            'product_id' => 1
        ]);

        $this->assertEquals(!empty($list) && count($list) == 1, true);

        //更新
        $changeCountRes = $pdo->update($pdo->loadTplParse('tplFileName.order.update'), [
            'id' => $insertId,
            'update_state' => 1
        ]);

        $this->assertEquals(!empty($changeCountRes) && $changeCountRes == 1, true);

        //删除
        $deleteCountRes = $pdo->delete($pdo->loadTplParse('tplFileName.order.delete'), [
            'product_id' => 1
        ]);

        $this->assertEquals(!empty($deleteCountRes) && $deleteCountRes == 1, true);
        //用户表操作
        //insert插入 第一条数据
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.user.insert'), [
            'username' => 'lys',
            'nickname' => 'SqlTplEngine作者'
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);
        //列表查询
        $list = $pdo->getAll($pdo->loadTplParse('tplFileName.user.list'), [
            'username' => 'lys'
        ]);
        $this->assertEquals(!empty($list) && count($list) == 1, true);
        //insert插入 第二条数据
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.user.insert'), [
            'username' => 'lys-1',
            'nickname' => 'SqlTplEngine作者'
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);
        //列表查询(不安全,通过占位替换赋值变量给模板)
        $list = $pdo->getAll($pdo->loadTplParse('tplFileName.user.where_list', [
            'where' => 'username = \'lys\''
        ]));
        $this->assertEquals(!empty($list) && count($list) == 1, true);
        //删除
        $deleteCountRes = $pdo->delete($pdo->loadTplParse('tplFileName.user.delete'), [
            'username' => 'lys'
        ]);
        $this->assertEquals(!empty($deleteCountRes) && $deleteCountRes == 1, true);
        //删除
        $deleteCountRes = $pdo->delete($pdo->loadTplParse('tplFileName.user.delete'), [
            'username' => 'lys-1'
        ]);
        $this->assertEquals(!empty($deleteCountRes) && $deleteCountRes == 1, true);
    }

    /**
     * 事务测试
     */
    public function testTrans()
    {
        $pdo = $this->getPdo();
        $pdo->startTrans();
        //insert插入
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.order.insert'), [
            'product_id' => 1,
            'state' => 2
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);
        $insertId = $pdo->lastInsertId();
        $pdo->rollBack();
        //查询单个
        $info = $pdo->getOne($pdo->loadTplParse('tplFileName.order.view'), [
            'id' => $insertId
        ]);
        $this->assertEquals(empty($info), true);
        $pdo->startTrans();
        $pdo->startTrans();
        //insert插入
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.order.insert'), [
            'product_id' => 1,
            'state' => 2
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);
        $insertId = $pdo->lastInsertId();
        $pdo->rollBack();
        $pdo->rollBack();
        //查询单个
        $info = $pdo->getOne($pdo->loadTplParse('tplFileName.order.view'), [
            'id' => $insertId
        ]);
        $this->assertEquals(empty($info), true);
        $pdo->startTrans();
        $pdo->startTrans();
        //insert插入
        $insertCountRes = $pdo->insert($pdo->loadTplParse('tplFileName.order.insert'), [
            'product_id' => 1,
            'state' => 2
        ]);
        $this->assertEquals(!empty($insertCountRes) && $insertCountRes == 1, true);
        $insertId = $pdo->lastInsertId();
        $pdo->commit();
        $pdo->commit();
        //查询单个
        $info = $pdo->getOne($pdo->loadTplParse('tplFileName.order.view'), [
            'id' => $insertId
        ]);
        $this->assertEquals(!empty($info), true);
        //删除
        $deleteCountRes = $pdo->delete($pdo->loadTplParse('tplFileName.order.delete'), [
            'product_id' => 1
        ]);
        $this->assertEquals(!empty($deleteCountRes) && $deleteCountRes == 1, true);

    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用 art-template 模板引擎可以将服务器从数据库获取到的数据通过 res.render() 传递给客户端。 以下是一个示例代码: ```javascript const express = require('express'); const app = express(); const artTemplate = require('art-template'); const mysql = require('mysql'); // 连接数据库 const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '123456', database: 'test' }); // 查询数据 connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; // 使用 art-template 渲染模板 const html = artTemplate(__dirname + '/views/index.art', { users: results }); // 发送响应 res.render('index', {html}); }); // 监听端口 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在上面的代码中,我们首先创建了一个 Express 应用程序,并引入了 art-template 库和 mysql 库。然后,我们连接到数据库并查询数据。接着,我们使用 art-template 模板引擎渲染模板,并将查询结果传递给模板。最后,我们将渲染后的 HTML 字符串通过 res.render() 方法传递给客户端。 在模板中,我们可以使用 {{}} 语法来输出数据。例如,我们可以使用以下代码来输出用户列表: ```html <ul> {{ each users }} <li>{{ $value.name }}</li> {{ /each }} </ul> ``` 在上面的代码中,我们使用 each 语法来遍历用户列表,并使用 $value.name 表示每个用户的名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuShanL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值