kecik / database
Kecik 框架的数据库库
Requires
- php: >=5.4.0
- kecik/kecik: 1.*@dev
This package is not auto-updated.
Last update: 2024-09-28 16:25:57 UTC
README
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(); ?>