octa-php/octa-pdo

一个轻量级的PHP-PDO数据库类,这个数据库类受到了codeigniter的active record的启发。

v1.0 2019-07-11 07:22 UTC

This package is auto-updated.

Last update: 2024-09-20 14:40:27 UTC


README

一个轻量级的PHP-PDO数据库类,这个数据库类受到了codeigniter的active record的启发。

Build Status Latest Stable Version Total Downloads Coverage Status License Badges

作者

Melquecedec Catang-catang

入门指南

通过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()

许可证

License

  • MIT
  • 版权所有 © 2019 OctaPDO。

致谢

支持

在此社交媒体网站上联系我。
linkedin.com