lnked / q
dev-master
2017-11-10 22:58 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-28 20:46:00 UTC
README
简单的PHP数据库抽象库
连接到数据库
require 'path/to/Q/Q.php';
QF('mysql://user:pass@host/dbname') // setup dsn
->connect() // connect to database
->alias('default') // set "default" alias
->tablePrefix('project__'); // set table prefix
连接到其他数据库并设置别名为“other-db”
QF('mysql://user:pass@host/dbname2?charset=utf8')->alias('other-db')->connect()->tablePrefix('bb__');
执行查询,获取行并释放结果
执行查询,获取第一行并释放结果
$res = Q('SELECT * FROM #users WHERE id = ?i', array(1));
$row = $res->row();
构建的查询
SELECT * FROM project__users WHERE id = 1
执行查询并获取每行。当所有行都获取完毕时,结果将自动释放。
$res = Q('SELECT * FROM #users');
while ($row = $res->each())
{
print_r($row);
}
执行查询,获取所有行并释放结果
$all = Q('SELECT * FROM #users WHERE id > ?i AND id < ?i', array(0, 30))->all();
// get all rows, key in result array will be field ID
$all = Q('SELECT * FROM #users WHERE id > ?i AND id < ?i', array(0, 30))->all('id');
构建的查询
SELECT * FROM project__users WHERE id > 0 AND id < 30
使用一个模板插入数据集
Q('INSERT INTO #test VALUES (?i, ?s, ?x, ?e)
ON DUPLICATE KEY UPDATE a = VALUES(a)*?x', array(
array(10, 'str11', 'str12', 'a*10'),
array(20, 'str21', 'str22', 'a*20'),
50,
array(30, 'str31', 'str32', 'a*30')
));
构建的查询
INSERT INTO project__test VALUES
(10, 'str11', 'str12', a*10),
(10, 'str21', 'str22', a*20),
(10, 'str31', 'str32', a*30)
ON DUPLICATE KEY UPDATE
a = VALUES(a)*50
WHERE
?i – 整数
?f – 浮点数
?b – 布尔值
?d – 日期
?t – 时间
?dt – 日期时间
?s – 字符串 (mysql_real_escape_string)
?x – 自动检测类型
?e – eval – 无变化
?li – 整数列表
?ls – 字符串列表
为带有IN的查询构建列表
使用?li修饰符构建整数值列表
$ids = array(1,3,5,7);
$res = Q('SELECT * FROM #test WHERE id IN(?li)', array($ids));
构建的查询
SELECT * FROM project__test WHERE id IN(1,3,5,7)
?ls修饰符下的字符串值列表:
$names = array('Anna', 'Bob');
$res = Q('SELECT * FROM #test WHERE name IN(?ls)', array($names));
构建的查询
SELECT * FROM project__test WHERE name IN('Anna', 'Bob')
在另一个数据库上执行查询,获取所有行并释放结果
$all = Q('other-db: SHOW TABLES')->all();
您可以将连接作为变量使用
$db = QF('mysql://user:pass@host/dbname?charset=utf8')->connect()->tablePrefix('aa__');
$all = $db->query('SELECT * FROM #registration_document_types')->all();
查询参数别名
您可以使用查询参数别名
Q('SELECT * FROM #table WHERE a = ?s:param1 AND b = ?i:param2', array(
'param2' => 123,
'param1' => 'some value'
);
构建的查询
SELECT * FROM #table WHERE a = 'some value' AND b = 123
您还可以使用传递参数的合并方法
Q('SELECT * FROM #table WHERE a = ?s:param1 AND b = ?i:param2 AND c = ?f', array(
'param2' => 123,
12.65,
'param1' => 'some value'
);
构建的查询(如果未设置别名,则参数将通过array_shift获取)
SELECT * FROM #table WHERE a = 'some value' AND b = 123 AND c = 12.65
另一个例子
Q('INSERT INTO #table (a, b, c) VALUES
(?i:field_a, ?s:field_b, CONCAT(?x, ":", ?s:field_b))
ON DUPLICATE KEY UPDATE a = VALUES(a) * ?x:multiplier', array(
array(
'field_a' => '1', 'field_b' => 'AAA 1', 1
),
array(
'field_a' => '2', 'field_b' => 'BBB 2', 2
),
'multiplier' => 75,
array(
'field_a' => '3', 'field_b' => 'CCC 3', 3
)
));
构建的查询
INSERT INTO seg__table (a, b, c) VALUES
(1, 'AAA 1', CONCAT(1, ":", 'AAA 1')),
(2, 'BBB 2', CONCAT(2, ":", 'BBB 2')),
(3, 'CCC 3', CONCAT(3, ":", 'CCC 3'))
ON DUPLICATE KEY UPDATE
a = VALUES(a) * 75