kecik/database

Kecik 框架的数据库库

1.0.3 2015-12-10 04:56 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:25:57 UTC


README

PayPal:

Rekening Mandiri: 113-000-6944-858, Atas Nama: Dony Wahyu Isprananda

这是一个专门为 Kecik 框架开发的库/库,旨在简化您在项目中使用数据库的过程。此库目前支持 mysql、oracle、postgresql、mongodb 和 PDO 数据库。

安装方法

文件 composer.json

{
	"require": {
		"kecik/kecik": "1.0.*@dev",
		"kecik/database": "1.0.*@dev"
	}
}

运行以下命令

composer install

MySQL 设置

此数据库的驱动设置为 mysqli,因此库不使用 mysql,而是使用 mysqli 驱动。

示例

$app->config->set('database.driver', 'mysqli');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');
$app->config->set('database.dbname', 'kecik');

PostgreSQL 设置

此数据库的驱动设置为 pgsql。对于 PostgreSQL,设置方式如下

无 DSN

示例

$app->config->set('database.driver', 'pgsql');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'postgres');
$app->config->set('database.password', '1234567890');

带 DSN

示例

$app->config->set('database.driver', 'pgsql');
$app->config->set('database.dsn', "host=localhost port=5432 dbname=kecik user=postgres password=1234567890 options='--client_encoding=UTF8'");

Oracle 设置

此数据库的驱动设置为 oci8,设置使用 dsn。

示例

$app->config->set('database.driver', 'oci8');
$app->config->set('database.dsn', 'localhost/xe');
$app->config->set('database.username', 'kecik');
$app->config->set('database.password', '1234567890');

MongoDB 设置

此数据库的驱动设置为 mongo

示例

$app->config->set('database.driver', 'mongo');
$app->config->set('database.dsn', 'mongodb://');
$app->config->set('database.dbname', 'kecik');

PDO 设置

此库也支持使用 PDO 驱动。所有设置都使用 dsn。 示例 PDO MySQL:

$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'mysql:host=localhost;dbname=kecik;');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');

示例 PDO PostgreSQL

$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'pgsql:host=localhost;dbname=kecik;');
$app->config->set('database.username', 'postgres');
$app->config->set('database.password', '1234567890');

示例 PDO Oracle

$app->config->set('database.driver', 'pdo');
$app->config->set('database.dsn', 'oci:host=localhost;dbname=xe;');
$app->config->set('database.username', 'kecik');
$app->config->set('database.password', '1234567890');

INSERT

插入函数的格式。

$app->db->$table->insert($data);

其结构如下

$data = [
	'field_nama' => 'Dony Wahyu Isp',
	'field_email' => 'dna.extrim@gmail.com'
];

UPDATE

更新函数的格式。

$app->db->$table->update($key, $data);

键和数据的结构是

//** $key
$key = ['id' => 2];

//** $data
$data = [
	'field_nama' => 'dnaextrim',
	'field_email' => 'dna.extrim@gmail.com'
];

DELETE

删除函数的格式。

$app->db->$table->delete($key);

其结构是

$key = ['id' => 3];

SELECT

find/select 函数的格式

$rows = $app->db->$table->find($filter, $limit, $order_by);

选择字段

$rows = $app->db->$table->find([
	'select' => [
		['nama, email'], //** Cara Pertama
		['nama', 'email'], //** Cara Kedua
		['max'=>'nilai'], //** Cara Ketiga
		['max'=>'nilai', 'as'=>'nilai_maksimum'] //** Cara Keempat
	]
]);

注意:第四种方法仅适用于 SQL 数据库,不适用于 NoSQL 数据库

LIMIT

$rows = $app->db->$table->find([],[10]); //** Cara Pertama limit 10 baris
$app->db->$table->find([], [5, 10]); //** Cara Kedua limit dari posisi index ke 5 sebanyak 10 baris

ORDER BY

$rows = $app->db->$table->find([],[],[
	'asc' => ['nama', 'email'], //** Pengurutan menaik/Ascending untuk field nama dan email
	'desc' => ['nama', 'email'] //** Pengurutan menurun/Descending untuk field nama dan email
]);

WHERE 无分组 WHERE 条件

$rows = $app->db->$table->find([
	'where'=> [
		["nama = 'Dony Wahyu Isp'"], //** Cara Pertama
		["nama", "='Dony Wahyu Isp'"], //** Cara Kedua
		["nama", "=", "Dony Wahyu Isp"], //** Cara Ketiga
		["nama = '?' AND email = '?'" => [$nama, $email]], //** Cara Keempat
		["nama", "='?' AND email = '?'" => [$nama, $email]], //** Cara Kelima
	]
]);

分组 WHERE 条件

$rows = $app->db->$table->find([
	'where' => [
		'and' => [
			'and' => [
				["nama", "=", "Dony Wahyu Isp"],
				["email", "=", "dna.extrim@gmail.com"]
			],
			'or' => [
				["nama", "=", "Dony Wahyu Isp"],
				["email", "=", "dna.extrim@gmail.com"]
			]
		]
	]
]);

BETWEEN

$rows = $app->db->$table->find([
	'where' => [
		["nilai", "between", [50, 100]],
		["nilai", "not between", [50, 100]], //** Dengan NOT
	]
]);

IN

$rows = $app->db->$table->find([
	'where' => [
		["nilai", "in", [50, 60, 70, 80]],
		["nilai", "not in", [50, 60, 70, 80]], //** Dengan NOT
	]
]);

GROUP BY

$rows = $app->db->$table->find([
	'group by'=> [
		['username']
	]
]);

JOIN (自然/左/右)

$rows = $app->db->$table->find([
	'join' => [
		['natural', 'table_profil'], //** Natural JOIN
		['left', 'table_profil', 'field_nama'], //** Left/Righ Join Cara Pertama
		['left', 'table_profil', ['field_nama_profile', 'field_nama_user']] //** Left/Right Join Cara Kedua
	]
]);

注意:目前 JOIN 不支持 MongoDB 等NoSQL 数据库

CALLBACK 用于对结果行进行操作,可以应用于所有字段或仅应用于特定字段。用于回调的参数是 $value$row$value 是每个字段在每行中提供的值,而 $row 是每行的数据。####应用于所有字段

$rows = $app->db->$table->find([
	'callback'=> function($value, $row) {
		return 'Rp. '.$value;
	}
]);

####应用于特定字段

$rows = $app->db->$table->find([
	'callback'=> [
		'harga' => function($value, $row) {
			return 'Rp. '.$value;
		},
		'password' => function($value, $row) {
			return '*****';
		},
		'id' => function($value, $row) {
			$row->action = "{\"id\":\"$value\"}";
			return $value;
		},
	]
]);

###字段 用于获取字段名、类型、大小和表名。

**从查询 find 中获取字段**

$rows = $app->db->$table->find();
$fields = $app->db->$table->fields();
foreach($fields as $field) {
	echo 'Name: '.$field->name;
	echo 'Type: '.$field->type;
	echo 'Size: '.$field->size;
	echo 'Table: '.$field->table;
}

从表中获取字段

$fields = $app->db->$table->fields();
foreach($fields as $field) {
	echo 'Name: '.$field->name;
	echo 'Type: '.$field->type;
	echo 'Size: '.$field->size;
	echo 'Table: '.$field->table;
}

###Num Rows 用于获取 find 的行数

$rows = $app->db->$table->find();
$count = $app->db->$table->num_rows();

在 Kecik 框架版本 1.1.* 中的示例使用

<?php
require "vendor/autoload.php";

$config = [
	'libraries' => [
		'database' => [
			'enable' => TRUE,
			'config' => [
				'driver' => 'mysqli',
				'hostname' => 'localhost',
				'username' => 'root',
				'password' => '1234567890',
				'dbname' => 'kecik'
			]
		]
	]
];

$app = new Kecik\Kecik($config);
$con = $app->db->connect();

$res = $app->db->exec("SELECT * FROM data", 'data');
print_r($app->db->fetch($res));

$id = ['id'=>'2'];
$data = [
	'nama'=>'Dony Wahyu Isp',
	'email'=>'dna.extrim@gmail.com'
];

$db = $app->db;
$ret = $db->data->insert($data);
$ret = $db->data->update($id, $data);
$ret = $db->data->delete($id);

$app->get('/', function() use ($db){
	$rows = $db->data->find([
		'where' => [
			['nama', '=', "Dony Wahyu Isp"]
		],
		'callback' => [
			//manipulating value of email fields
			'email' => function($val, $row) {
				return substr($val, 0, 3).str_repeat('*', strpos($val, '@')-3).substr($val, strpos($val, '@'))
			}
		]
	]);
	
	foreach ($rows as $row) {
		echo 'Nama: '.$row->nama.'<br />';
		/* 
		Output email for dna.extrim@gmail.com
		is dna*******@gmail.com
		*/
		echo 'Email: '.$row->email.'<hr />';
	}
});

$app->run();
?>

不使用自动加载库的示例

<?php
$app = new Kecik\Kecik();

$app->config->set('database.driver', 'mysqli');
$app->config->set('database.hostname', 'localhost');
$app->config->set('database.username', 'root');
$app->config->set('database.password', '1234567890');
$app->config->set('database.dbname', 'kecik');

$db = new Kecik\Database($app);
$con = $db->connect();

$res = $db->exec("SELECT * FROM data", 'data');
print_r($db->fetch($res));

$id = ['id'=>'2'];
$data = [
	'nama'=>'Dony Wahyu Isp',
	'email'=>'dna.extrim@gmail.com'
];

$ret = $db->data->insert($data);
$ret = $db->data->update($id, $data);
$ret = $db->data->delete($id);

$app->get('/', function() use ($db){
	$rows = $db->data->find([
		'where' => [
			['nama', '=', "Dony Wahyu Isp"]
		],
		'callback' => [
			//manipulating value of email fields
			'email' => function($val, $row) {
				return substr($val, 0, 3).str_repeat('*', strpos($val, '@')-3).substr($val, strpos($val, '@'))
			}
		]
	]);
	
	foreach ($rows as $row) {
		echo 'Nama: '.$row->nama.'<br />';
		/* 
		Output email for dna.extrim@gmail.com
		is dna*******@gmail.com
		*/
		echo 'Email: '.$row->email.'<hr />';
	}
});

$app->run();
?>