nkt/flame

具有舒适API的PDO包装器

1.1.1 2015-04-08 11:59 UTC

This package is auto-updated.

Last update: 2024-09-04 12:36:51 UTC


README

Build Status Coverage Status

具有舒适API的PDO包装器

安装

Flame需要php 5.4+和PDO扩展。

composer require nkt/flame:~1.0

用法

<?php

use Flame\Connection;
use Flame\Grammar\MysqlGrammar;

$db = new Connection('mysql:dbname=hello_world', 'user', 'password', [], new MysqlGrammar());
$db->prepare(...);

想法

直接在查询中写入占位符类型

例如

SELECT * FROM goods g WHERE g.price BETWEEN f:minPrice AND f:maxPrice;
SELECT * FROM users u WHERE u.username = s:username; -- :username also bind as string
SELECT * FROM orders o WHERE o.id = i:id;
SELECT * FROM users u WHERE u.registered >= d:date;

原生PDO占位符的区别

与PDO不同,您可以在必要时重复使用相同的占位符。您只需指定一次占位符的类型。

$users = $flame->prepare(
    'SELECT * FROM users WHERE age >= i:age OR (registered < d:registered AND age = :age)'
)->execute(['age' => $age]);

您不需要对每个整数值进行类型转换,Flame会为您处理。

$stmt = $flame->prepare('SELECT * FROM users WHERE id = i:id)');
$users = $stmt->execute(['id' => $_POST['id']]);

每次查询执行时,Flame都会测试值是否为null,如果是,则将占位符类型更改为PDO::PARAM_NULL

$stmt = $flame->prepare('INSERT INTO users VALUES(s:username, d:last_login))');
$users = $stmt->execute(['username' => 'John Doe', 'last_login' => null]);

Flame添加了新的类型:日期和时间。您可以将这些数据绑定为DateTimestringint

占位符类型

查询构建器

Flame还提供强大的查询构建器。连接提供基础包装器

  • Connection::select(string $column...)
  • Connection::update(string $table, array $columns)
  • Connection::insert(string $table, array $columns)

每个SQL语句都通过与其相同名称的方法提供,方法名使用camelCase

示例

$posts = $db->prepare(
    $db->select('p.id', 'p.title', 'p.content')
       ->from('posts p')
       ->join('post_tags pt', 'p.id', 'pt.post_id')
       ->join('tags t', 't.id', 'pt.tag_id')
       ->where(function ($e) {
           $e->equal('t.name', ':tag');
       })
)->execute(['tag' => $tag]);

$db->prepare($db->insert('users', [
        'username'   => ':name',
        'password'   => ':pass',
        'registered' => 'd:now'
    ]))->execute([
        'name' => $name,
        'pass' => $pass,
        'now'  => new \DateTime()
   ]);

许可证

MIT