octa-php / octa-pdo
一个轻量级的PHP-PDO数据库类,这个数据库类受到了codeigniter的active record的启发。
This package is auto-updated.
Last update: 2024-09-20 14:40:27 UTC
README
一个轻量级的PHP-PDO数据库类,这个数据库类受到了codeigniter的active record的启发。
作者
入门指南
通过composer安装OctaPDO。
composer require octa-php/octa-pdo
先决条件
-Php 5.3+
-mysql (any version that supports php 5.3+)
如何使用
OctaPDO需要一个包含您的数据库连接的参数。因此,我们假设您已经有一个类似下面的数据库连接。
$DB_HOST = 'yourhost';
$DB_USERNAME = 'your username';
$DB_PASSWORD = 'your password';
$DB_NAME = 'your database name';
$DB_con = null;
$DB_con = new PDO("mysql:host=$DB_HOST", $DB_USERNAME, $DB_PASSWORD);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
要调用OctaPDO,只需像以下示例一样将数据库连接传递给OctaPDO类
define('__ROOT__', dirname(dirname(__FILE__)));
include(__ROOT__."../OctaPDO.php");
$db = new OctaPDO($DB_con);
OctaPDO Active Record 文档
$db->get();
执行选择查询并返回结果。可以单独使用来检索表中的所有记录
$query = $db->get('mytable');
// Produces: SELECT * FROM mytable
第二个和第三个参数可以用来设置限制和偏移量子句
$query = $db->get('mytable', 10, 20); <br />
// Produces: SELECT * FROM mytable LIMIT 20, 10 (in MySQL. Other databases have slightly different syntax)
您会注意到上述函数被分配给一个名为$query的变量,可以用来显示结果
$query = $db->get('mytable');
foreach ($query->result() as $row)
{
echo $row->title;
}
$db->select();
允许您编写查询的SELECT部分
$db->select('title, content, date');
$query = $db->get('mytable');
// Produces: SELECT title, content, date FROM mytable
$db->select()接受一个可选的第二个参数。如果您将其设置为FALSE,OctaPDO将不会尝试使用反引号保护字段或表名。这对于需要复合选择语句的情况很有用。
$db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE);
$query = $db->get('mytable');
$db->join();
允许您编写查询的JOIN部分
$db->select('*');
$db->from('blogs');
$db->join('comments', 'comments.id = blogs.id');
$query = $db->get();
// Produces:
// SELECT * FROM blogs
// JOIN comments ON comments.id = blogs.id
如果需要在一个查询中进行多个连接,可以多次调用此函数。
如果您需要特定的JOIN类型,可以通过函数的第三个参数指定。选项有:left,right,outer,inner,left outer和right outer。
$db->join('comments', 'comments.id = blogs.id', 'left');
// Produces: LEFT JOIN comments ON comments.id = blogs.id
$db->where();
此函数允许您使用四种方法之一设置WHERE子句
- 简单的键/值方法
请注意,等号为您添加。如果您使用多个函数调用,它们将用AND连接起来$db->where('name', $name); $db->where('title', $title); $db->where('status', $status); // WHERE name = 'Joe' AND title = 'boss' AND status = 'active' - 自定义键/值方法
您可以在第一个参数中包含一个运算符,以控制比较
$db->where('name !=', $name);
$db->where('id <', $id);
// Produces: WHERE name != 'Joe' AND id < 45
- 关联数组方法
您也可以使用此方法包含自己的运算符
$array = array('name' => $name, 'title' => $title, 'status' => $status);
$db->where($array);
// Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
- 自定义字符串
您可以手动编写自己的子句
$where = "name='Joe' AND status='boss' OR status='active'";
$db->where($where);
$db->where()
接受一个可选的第三个参数。如果您将其设置为FALSE,OctaPDO将不会尝试使用反引号保护字段或表名。
$db->or_where();
此函数与上面的一样,不同之处在于多个实例通过OR连接
$db->where('name !=', $name);
$db->or_where('id >', $id);
// Produces: WHERE name != 'Joe' OR id > 50
$db->where_in();
生成一个WHERE字段IN ('item', 'item')的SQL查询,如果适当,则使用AND连接
$names = array('Frank', 'Todd', 'James');
$db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')
$db->or_where_in();
生成一个WHERE字段IN ('item', 'item')的SQL查询,如果适当,则使用OR连接
$names = array('Frank', 'Todd', 'James');
$db->or_where_in('username', $names);
// Produces: OR username IN ('Frank', 'Todd', 'James')
$db->where_not_in();
生成一个WHERE字段NOT IN ('item', 'item')的SQL查询,如果适当,则使用AND连接
$names = array('Frank', 'Todd', 'James');
$db->where_not_in('username', $names);
// Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')
$db->or_where_not_in();
生成一个WHERE字段NOT IN ('item', 'item')的SQL查询,如果适当,则使用OR连接
$names = array('Frank', 'Todd', 'James');
$db->or_where_not_in('username', $names);
// Produces: OR username NOT IN ('Frank', 'Todd', 'James')
$db->like();
此函数允许您生成LIKE子句,这对于搜索很有用。
- 简单的键/值方法
$db->like('title', 'match');
// Produces: WHERE title LIKE '%match%'
如果您使用多个函数调用,它们将用AND连接起来
$db->like('title', 'match');
$db->like('body', 'match');
// WHERE title LIKE '%match%' AND body LIKE '%match%
如果您想控制通配符(%)的位置,可以使用可选的第三个参数。您的选项有'before','after'和'both'(默认)。
$db->like('title', 'match', 'before');
// Produces: WHERE title LIKE '%match'
$db->like('title', 'match', 'after');
// Produces: WHERE title LIKE 'match%'
$db->like('title', 'match', 'both');
// Produces: WHERE title LIKE '%match%'
如果您不想使用通配符(%),可以将可选的第三个参数传递为'none'选项。
$db->like('title', 'match', 'none');
// Produces: WHERE title LIKE 'match'
- 关联数组方法
$array = array('title' => $match, 'page1' => $match, 'page2' => $match);
$db->like($array);
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'
$db->or_like();
此函数与上面的一样,不同之处在于多个实例通过OR连接
$db->like('title', 'match');
$db->or_like('body', $match);
// WHERE title LIKE '%match%' OR body LIKE '%match%'
$db->not_like();
此函数与like()相同,不同之处在于它生成NOT LIKE语句
$db->not_like('title', 'match');
// WHERE title NOT LIKE '%match%
使用$db->or_not_like();
此函数与not_like()相同,区别在于多个实例通过OR连接
$db->like('title', 'match');
$db->or_not_like('body', 'match');
// WHERE title LIKE '%match% OR body NOT LIKE '%match%'
使用$db->group_by();
允许您编写查询的GROUP BY部分
$db->group_by("title");
// Produces: GROUP BY title
您也可以传递一个包含多个值的数组
$db->group_by(array("title", "date"));
// Produces: GROUP BY title, date
使用$db->order_by();
允许您设置ORDER BY子句。第一个参数包含您希望排序的列名。第二个参数允许您设置结果的排序方向。选项有asc(升序)、desc(降序)或random(随机)。
$db->order_by("title", "desc");
// Produces: ORDER BY title DESC
您也可以在第一个参数中传递自己的字符串
$db->order_by('title desc, name asc');
// Produces: ORDER BY title DESC, name ASC
如果需要多个字段,也可以多次调用函数。
$db->order_by("title", "desc");
$db->order_by("name", "asc");
// Produces: ORDER BY title DESC, name ASC
使用$db->insert();
根据您提供的数据生成插入字符串并运行查询。您可以将数组或对象传递给此函数。以下是一个使用数组的示例
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
第一个参数将包含表名,第二个是一个包含值的关联数组。以下是一个使用对象的示例
/*
class Myclass {
var $title = 'My Title';
var $content = 'My Content';
var $date = 'My Date';
}
*/
$object = new Myclass;
$db->insert('mytable', $object);
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
第一个参数将包含表名,第二个是对象。
使用$db->update();
根据您提供的数据生成更新字符串并运行查询。您可以将数组或对象传递给此函数。以下是一个使用数组的示例
$data = array(
'title' => $title,
'name' => $name,
'date' => $date
);
$db->where('id', $id);
$db->update('mytable', $data);
// Produces:
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
或者您可以提供一个对象
/*
class Myclass {
var $title = 'My Title';
var $content = 'My Content';
var $date = 'My Date';
}
*/
$object = new Myclass;
$db->where('id', $id);
$db->update('mytable', $object);
// Produces:
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
您会注意到使用$db->where()函数来设置WHERE子句。您可以将此信息作为字符串直接传递到更新函数中
$db->update('mytable', $data, "id = 4");
或者作为数组
$db->update('mytable', $data, array('id' => $id));
当执行更新时,您也可以使用上面描述的$db->set()函数。
使用$db->delete();
生成删除SQL字符串并运行查询。
$db->delete('mytable', array('id' => $id));
// Produces:
// DELETE FROM mytable
// WHERE id = $id
第一个参数是表名,第二个是WHERE子句。您也可以使用where()或or_where()函数来代替将数据传递给函数的第二个参数
$db->where('id', $id);
$db->delete('mytable');
// Produces:
// DELETE FROM mytable
// WHERE id = $id
如果您想从多个表中删除数据,可以将表名数组传递给delete()函数。
$tables = array('table1', 'table2', 'table3');
$db->where('id', '5');
$db->delete($tables);
如果您想从表中删除所有数据,可以使用truncate()函数或empty_table()函数。
使用OctaPDO Active Record的查询示例
$select = array(
"*",
"u.first_name",
"u.last_name",
"u.email",
"ut.type"
);
$db->select($select);
$db->order_by("u.userID","DESC");
$db->group_by("u.user_type");
$db->join("user_role AS ur","ur.user_role_id=ut.user_role","LEFT");
$db->join("user_type AS ut","ut.user_type_id=u.user_type","LEFT");
$db->get('users AS u');
$result_data = $db->result(); //this will return an array of results
预定义类的列表
--$db->insert_id() //return the last inserted id
--$db->select()
--$db->where()
--$db->or_where()
--$db->where_in()
--$db->or_where_in()
--$db->where_not_in()
--$db->or_where_not_in()
--$db->order_by()
--$db->group_by()
--$db->join()
--$db->get()
--$db->row()
--$db->num_rows()
--$db->result()
--$db->like()
--$db->or_like()
--$db->not_like()
--$db->or_not_like()
许可证
- MIT
- 版权所有 © 2019 OctaPDO。
致谢
- Symfony的Twig模板引擎
- Phpti (https://arshaw.com/phpti/)
支持
在此社交媒体网站上联系我。
linkedin.com