nkt / flame
具有舒适API的PDO包装器
1.1.1
2015-04-08 11:59 UTC
Requires
- php: ~5.4
- ext-pdo: >1.0.3
Requires (Dev)
- phpunit/phpunit: ~4.0
- satooshi/php-coveralls: dev-master
README
具有舒适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添加了新的类型:日期和时间。您可以将这些数据绑定为DateTime
、string
或int
。
占位符类型
查询构建器
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() ]);