|
|
|
แจกเผื่อใครอยากใช้ อยากเอาไปปรับหรือ เอาไว้เป็นแนวทาง Class Connect Database แบบ mysqli |
|
|
|
|
|
|
|
Code (PHP)
<?php
class clsConnect{
public $table = '';
public function __construct(){
$this->db = mysqli_init();
$this->db->options(MYSQLI_OPT_CONNECT_TIMEOUT, 3600);
$this->db->real_connect('localhost', 'root', 'root', 'test');
$this->db->set_charset('utf8');
}
public function SelectAll($table, $where=array(), $orderby='', $limit=''){
if(!empty($where)){
foreach((array)$where as $i => $item){
$item = $this->db->real_escape_string($item);
$qrywhere .= "$i = '$item' AND ";
}
}
if(!empty($orderby)){
$orderby = "ORDER BY $orderby";
}
if(!empty($limit)){
$limit = "LIMIT $limit";
}
$sql="
SELECT *
FROM $table
WHERE
$qrywhere
1
$orderby
$limit
";
$result = array();
$query = $this->db->query($sql);
$result['num'] = $query->num_rows;
while (($item = $query->fetch_assoc())) {
$result['row'][] = $item;
}
return $result;
$result->free();
}
public function SelectOne($table, $where=array(), $orderby=''){
if(!empty($where)){
foreach((array)$where as $i => $item){
$item = $this->db->real_escape_string($item);
$qrywhere .= "$i = '$item' AND ";
}
}
if(!empty($orderby)){
$orderby = "ORDER BY $orderby";
}
$sql="
SELECT *
FROM $table
WHERE
$qrywhere
1
$orderby
LIMIT 0,1
";
$result = array();
$query = $this->db->query($sql);
$result['row'] = $query->fetch_assoc();
$result['num'] = $query->num_rows;
return $result;
$result->free();
}
public function Insert($table='', $data=array()){
if(!empty($data)){
$attribute_arr = array();
$values_arr = array();
foreach($data as $fields => $val){
$attribute_arr[] = $fields;
$values_arr[] ="'".$this->db->real_escape_string($val)."'";
}
$attribute = implode(',', $attribute_arr);
$values = implode(',', $values_arr);
$sql="
INSERT INTO $table ($attribute)
VALUES($values);
";
$query = $this->db->query($sql);
if($query){
$result['success'] = 'OK';
$result['code'] = $this->db->insert_id;
}else{
$result['success'] = 'FAIL';
$result['error'] = $this->db->error;
}
}else{
$result['success'] = 'FAIL';
$result['error'] = 'NOT FOUND DATA';
}
return $result;
}
public function Update($table='', $data=array(), $where=array()){
if(!empty($data)){
$attribute_arr = array();
$where_arr = array();
foreach($data as $fields => $value){
$value = $this->db->real_escape_string($value);
$attribute_arr[] = " $fields = '$value' ";
}
foreach($where as $fields => $value){
$value = $this->db->real_escape_string($value);
$where_arr[] = " $fields = '$value' ";
}
$attribute = implode(', ', $attribute_arr);
$whereqry = implode(' AND ', $where_arr);
$sql="
UPDATE $table SET
$attribute
WHERE
$whereqry
";
$query = $this->db->query($sql);
if($query){
$result['success'] = 'OK';
}else{
$result['success'] = 'FAIL';
$result['error'] = $this->db->error;
}
}else{
$result['success'] = 'FAIL';
$result['error'] = 'NOT FOUND DATA';
}
return $result;
}
public function Delete($table='', $where=array()){
if(!empty($where)){
$where_arr = array();
foreach($where as $fields => $value){
$value = $this->db->real_escape_string($value);
$where_arr[] = " $fields = '$value' ";
}
$whereqry = implode(' AND ', $where_arr);
$sql="
DELETE FROM
$table
WHERE
$whereqry
";
$query = $this->db->query($sql);
if($query){
$result['success'] = 'OK';
}else{
$result['success'] = 'FAIL';
$result['error'] = $this->db->error;
}
}else{
$result['success'] = 'FAIL';
$this->error[] = 'NOT FOUND DATA';
}
return $result;
}
}
$db = new clsConnect();
?>
Tag : PHP, MySQL, HTML/CSS
|
|
|
|
|
|
Date :
2016-06-22 17:48:29 |
By :
progamer2000 |
View :
5523 |
Reply :
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
วิธีใช้งาน
การ Select แบบทั้งหมด
Code (PHP)
$result = $db->SelectAll('table',array('เงื่อนไข'=>'xxxx'));
การ insert
Code (PHP)
$db->Insert('table',array('ข้อมูล'=>'xxxx'));
หรือ
$data['field'] = 'ก';
$data['field2'] = 'ข';
$db->Insert('table',$data);
การอัพเดท
Code (PHP)
$db->Update('table',array('ข้อมูล'=>'xxxx'),array('code'=>xxx));
ลองใช้ดูสำหรับมือใหม่ครับ code ไม่ยาก ค่อนข้างจะพื้นฐาน สามารถไปปรับแต่ง ลองเขียนเพิ่ม ได้ง่าย
|
ประวัติการแก้ไข 2016-06-23 16:27:12
|
|
|
|
Date :
2016-06-22 17:59:59 |
By :
progamer2000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เยี่ยมเหมาะสำหรับคนที่ไม่ชอบเฟรมเวิร์ค และเรียนรู้สำหรับการเขียนแบบ OOP แทนแบบโบราณๆ สักที
|
|
|
|
|
Date :
2016-06-23 09:06:52 |
By :
compiak |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ว่าง ๆ เมื่อไร เขียนเป็น "บทความ" เลยครับ ขอชื่นชมและนับถือครับ
|
|
|
|
|
Date :
2016-06-23 09:12:24 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมชอบเทคนิคแบบนี้แหละครับ ต่อยอดได้
|
|
|
|
|
Date :
2016-06-23 09:16:15 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากทำมั้ง แต่ยังทำไม่เสร็จ ง่วง
ขาด insert update delete transection
index.php
<?php
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
use classes\database;
$skins = database::table("colors")
->select(['id', 'name'])
->where('id', '=', 1)
->orWhere('id', '>', 5)
->get();
foreach ($colors as $color) {
echo $colors->id . " - " . $colors->name . '<br />';
}
// output
// ================
// 1 - ฟ้า
// 6 - เหลือง
// 7 - ฟ้าสว่าง
// 8 - ขาวสว่าง
// 9 - เขียวสว่าง
// 10 - ม่วงสว่าง
// 11 - แดงสว่าง
// 12 - เหลืองสว่าง
|
|
|
|
|
Date :
2016-06-23 14:11:36 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ต่างๆ ที่ใช้
config.php
<?php
namespace classes;
trait config
{
public function configuration() {
return [
'host' => 'localhost',
'database' => 'mydatabase',
'username' => 'root',
'password' => 'mysql57',
];
}
}
database.php
<?php
namespace classes;
class database
{
public static function table($table) {
return new table($table);
}
}
table.php
<?php
namespace classes;
class table
{
use config, query {
query::__construct as private __queryConstruct;
}
protected $table;
protected $commands;
public function __construct($table) {
$this->table = $table;
$this->commands = [];
$this->__queryConstruct($this->configuration());
}
public function all() {
$this->add([
'condition' => false,
'command' => "select * from {$this->table};",
'values' => []
]);
return $this->get();
}
public function first() {
$this->add([
'condition' => false,
'command' => "select * from {$this->table} limit 1;",
'values' => []
]);
return $this->get();
}
public function select(Array $fields) {
$implode_fields = implode (', ', $fields);
$this->add([
'condition' => false,
'command' => "select {$implode_fields} from {$this->table}",
'values' => []
]);
return $this;
}
public function where($field, $operator, $value) {
$this->add([
'condition' => true,
'command' => "{$field} {$operator} ?",
'values' => [$value]
]);
return $this;
}
public function orWhere($field, $operator, $value) {
$this->add([
'condition' => false,
'command' => "or {$field} {$operator} ?",
'values' => [$value]
]);
return $this;
}
public function whereBetween($field, Array $values) {
$this->add([
'condition' => true,
'command' => "{$field} between ? and ?",
'values' => $values
]);
return $this;
}
public function whereNotBetween($field, Array $values) {
$this->add([
'condition' => true,
'command' => "{$field} not between ? and ?",
'values' => $values
]);
return $this;
}
public function whereIn($field, Array $values) {
$implode_values = implode (', ', array_map(
function () {
return '?';
},
$values
));
$this->add([
'condition' => true,
'command' => "{$field} in ({$implode_values})",
'values' => $values
]);
return $this;
}
public function whereNotIn($field, Array $values) {
$implode_values = implode (', ', array_map(
function () {
return '?';
},
$values
));
$this->add([
'condition' => true,
'command' => "{$field} not in ({$implode_values})",
'values' => $values
]);
return $this;
}
public function whereNull($field) {
$this->add([
'condition' => true,
'command' => "{$field} is null",
'values' => []
]);
return $this;
}
public function whereNotNull($field) {
$this->add([
'condition' => true,
'command' => "{$field} is not null",
'values' => []
]);
return $this;
}
public function join($table, $field1, $operator, $field2) {
$this->add([
'condition' => false,
'command' => "inner join {$table} on {$field1} {$operator} {$field2}",
'values' => []
]);
return $this;
}
public function leftJoin($table, $field1, $operator, $field2) {
$this->add([
'condition' => false,
'command' => "left join {$table} on {$field1} {$operator} {$field2}",
'values' => []
]);
return $this;
}
public function groupBy(Array $fields) {
$implode_fields = implode (', ', $fields);
$this->add([
'condition' => false,
'command' => "group by {$implode_fields}",
'values' => []
]);
return $this;
}
public function having($field, $operator, $value) {
$this->add([
'condition' => false,
'command' => "having {$field} {$operator} ?",
'values' => $value
]);
return $this;
}
public function orderBy($field, $order) {
$this->add([
'condition' => false,
'command' => "order by {$field} {$order}",
'values' => []
]);
return $this;
}
public function get() {
$command = $this->builder();
return $this->runQuery($command[0], $command[1]);
}
public function insert(Array $fields) {
}
public function update(Array $fields) {
}
public function delete() {
}
protected function add($command) {
$this->commands[] = [
'condition' => $command['condition'],
'command' => $command['command'],
'values' => $command['values']
];
}
protected function builder() {
$query = '';
$values = [];
$first_condition = false;
foreach($this->commands as $command) {
if ($command['condition'] == false) {
$query .= "{$command['command']} ";
}
else {
$condition = ($first_condition) ? 'and' : 'where';
$query .= "{$condition} {$command['command']} ";
$first_condition = true;
}
$values = array_merge($values, $command['values']);
}
return [$query, $values];
}
}
query.php
<?php
namespace classes;
use PDO;
trait query
{
protected $pdo;
public function __construct(Array $config) {
$this->pdo = new PDO("mysql:host={$config['host']};dbname={$config['database']};",
$config['username'],
$config['password']);
}
protected function runQuery($query, $values) {
$stmt = $this->pdo->prepare($query);
$stmt->execute($values);
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
protected function runNoneQuery($query, $values) {
}
}
|
|
|
|
|
Date :
2016-06-23 14:12:06 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สรุปคือ ถ้าจะเอา function ขนาดนี้
ใช้ framework เถอะ จะได้ไม่เป็นภาระกับการเขียน
|
|
|
|
|
Date :
2016-06-23 14:15:47 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Doctrine, Propel ดีกว่าไหม
Eloquent ก็ไปกับ Framework ล่ะ
ส่วน Active Record ก็นิ่ง ไม่พัฒนาต่อ
ถ้าแนะนำก็ Propel ตัวเล็ก API ก็ง่ายด้วย
|
|
|
|
|
Date :
2016-06-23 14:38:51 |
By :
fossil31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แต่เรามองว่ามันเป็นแบบฝึกหัดในการฝึก oop อย่างดีเลยนะ
ถ้าไม่รู้จะเอา oop ไปใช้กับอะไรก็ลองเขียน class ติดต่อ database นี่แหละ
พอมองภาพออกแล้วก็ค่อย ต่อยอดไปศึกษาอย่างอื่นต่อ
เพราะจริงๆ แล้วคนเป็น oop มักจะไม่เขียน class พื้นฐานเองหรอก
มุ่งไป framework กันหมดแล้ว ประหยัดเวลา
|
|
|
|
|
Date :
2016-06-23 15:22:14 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55555 บาง คห class แบบจัดเต็มมาก ><
ผมก็เห็นด้วยนะ ใช้ framework ส่วนตัวผมใช้ codeigniter อยู่ เหมือนกัน
ส่วน class ที่แจก เอาไว้ ใช้กับงานที่ เพื่อนๆ ถามมา เวลา เอา code มาเทสเขียนให้ >< เพราะ code การทำงานเกี่ยวกับ DB มันค่อนข้างจะพื้นฐาน ดี เหมาะกับมือใหม่ ที่ กำลังหัดเขียน หรือ พวก โปรเจคส่งอาจารย์ งานเล็กๆ ที่คนทำยังไม่ค่อยเป็น เพราะตัว code มันง่ายๆ ค่อนข้างแก้ได้ง่าย ไม่ได้ใช่ อะไรยุ่งยากมากมาย
|
ประวัติการแก้ไข 2016-06-23 16:28:30
|
|
|
|
Date :
2016-06-23 16:23:33 |
By :
progamer2000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าจะมีพวก bind_param สักหน่อยไหมครับ.
เพราะเขียนแบบนี้ ผมว่ามน
คือ ถ้าแนะนำ ผมแนะนำเล่น PDO ไปเลยน่ะครับ
|
|
|
|
|
Date :
2016-06-24 07:12:26 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เสร็จแระ
select all
$colors = database::table('colors')
->all();
select first row
$colors = database::table('colors')
->first();
select with condition
// ใช้ where หลายอันโค้ดจะใส่ and ให้เอง ยกเว้น orWhere จะเป็น or
$colors = database::table('colors')
->select(['*'])
->where('id', '=', 1)
->where('id', '>', 3)
->get();
$colors = database::table('colors')
->select(['id', 'name'])
->where('id', '=', 2)
->orWhere('id', '>', 5)
->get();
$colors = database::table('colors')
->select(['id', 'name'])
->whereBetween('id', [1, 3])
->get();
// method อื่นๆ
// - whereNotBetween($var, $array)
// - whereIn($var, $array)
// - whereNotIn($var, $array)
// - whereNull($var)
// - whereNotNull($var)
==================
insert
$affected = database::table('colors')
->insert(['code' => 'gold', 'name' => 'ทอง']);
// $affected คือ จำนวน row ที่ insert
การ update delete สามารถใช้ where แบบเดียวกับ select ได้
update
$affected = database::table('colors')
->where('id', '=', 13)
->update(['code' => 'silver', 'name' => 'เงิน']);
// $affected คือ จำนวน row ที่ update
delete
$affected = database::table('colors')
->where('id', '=', 13)
->delete();
// $affected คือ จำนวน row ที่ delete
|
|
|
|
|
Date :
2016-06-24 09:15:58 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โค้ดเพิ่มเติม
table.php
public function insert(Array $fields) {
$implode_fields = implode(', ', array_map(
function ($v, $k) {
return $k;
},
$fields,
array_keys($fields)
));
$implode_values = implode (', ', array_map(
function () {
return '?';
},
$fields
));
$this->add([
'condition' => false,
'command' => "insert into {$this->table} ({$implode_fields}) values ({$implode_values})",
'values' => array_values($fields)
]);
$command = $this->builder();
return $this->runNoneQuery($command[0], $command[1]);
}
public function update(Array $fields) {
$implode_fields = implode(', ', array_map(
function ($v, $k) {
return "{$k} = ?";
},
$fields,
array_keys($fields)
));
$this->unshift([
'condition' => false,
'command' => "update {$this->table} set {$implode_fields}",
'values' => array_values($fields)
]);
$command = $this->builder();
return $this->runNoneQuery($command[0], $command[1]);
}
public function delete() {
$this->unshift([
'condition' => false,
'command' => "delete from {$this->table}",
'values' => []
]);
$command = $this->builder();
return $this->runNoneQuery($command[0], $command[1]);
}
protected function unshift($command) {
array_unshift($this->commands, [
'condition' => $command['condition'],
'command' => $command['command'],
'values' => $command['values']
]);
}
query.php
protected function runNoneQuery($query, $values) {
$stmt = $this->pdo->prepare($query);
$affected = $stmt->execute($values);
return $affected;
}
|
|
|
|
|
Date :
2016-06-24 09:18:10 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลืมแนะนำมี join, group by, having อีก
join
$provinces = database:table('provinces')
->select('provinces.name', 'regions.name')
->join('regions', 'provinces.region_id', '=', 'regions.id')
->where('regions.id', '=', 2)
->whereBetween('provinces.id', [10-16])
->get();
- อื่นๆ
- leftJoin($table, $field1, $operator, $field2)
group by & having
$provinces = database:table('provinces')
->select(''regions.name')
->groupBy(['regions.id'])
->having('regions.id', '>', 3)
->get();
การนำข้อมูลที่ query ไปใช้ จะใช้ foreach
Code (PHP)
foreach ($provinces as $province) {
// $province จะเป็น object เวลาเรียกชื่อฟิลด์ใช้ $province->name, $province->population ฯลฯ
}
|
|
|
|
|
Date :
2016-06-24 09:33:06 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code ดีๆทั้ง อ่านเพลิน
|
|
|
|
|
Date :
2016-06-24 09:52:38 |
By :
dudesaranyu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีความสุขกับการ query มาก
Code (PHP)
<?php
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
use classes\database;
$provinces = database::table('provinces')
->select(['provinces.id', 'provinces.name', 'regions.name as region'])
->join('regions', 'provinces.region_id', '=', 'regions.id')
->where('provinces.id', '>', 2)
->whereNotIn('provinces.id', [7, 8, 10])
->orderBy(['provinces.region_id asc', 'provinces.name desc'])
->take(10)
->skip(3)
->get();
foreach ($provinces as $province) {
echo "{$province->id} - {$province->region} - {$province->name}<br />";
}
echo '<br />';
echo '====================';
Quote:6 - เขตที่ 2 - อ่างทอง
9 - เขตที่ 2 - ชัยนาท
14 - เขตที่ 3 - สระแก้ว
12 - เขตที่ 3 - ปราจีนบุรี
13 - เขตที่ 3 - นครนายก
11 - เขตที่ 3 - ฉะเชิงเทรา
17 - เขตที่ 4 - สุพรรณบุรี
15 - เขตที่ 4 - ราชบุรี
18 - เขตที่ 4 - นครปฐม
16 - เขตที่ 4 - กาญจนบุรี
====================
|
|
|
|
|
Date :
2016-06-24 13:15:38 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่านเพลินเลย
ผมชอบนะ มีอะไรก็เอามาแบ่งปันแบบนี้
ยิ่งบทความ oop ยิ่งชอบ
ปกติผมใช้ framework ผมใช้ codeigniter โปรเจกผม เป็น codeigniter 100 %
ปล.ขอบคุณ ห้ามตอบเกินวันละ 2 กระทู้ และ progamer2000 มากๆ ครับผม
|
|
|
|
|
Date :
2016-06-27 08:50:11 |
By :
compiak |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@เจ้าของกระทู้ "แจกเผื่อใครอยากใช้ อยากเอาไปปรับหรือ เอาไว้เป็นแนวทาง Class Connect Database แบบ mysqli"
ถ้าคุณโกรธผมก็ต้องขอโทษด้วยครับ
--- ผมเอาทิ้งถังขยะหมด เพราะมันไม่มีประโยชน์สำหรับผม +55555
|
|
|
|
|
Date :
2016-06-28 21:53:07 |
By :
หน้าฮี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
บัฟกันแหลกลาน "ใจเยนนนเราเพื่อนกานน"
แต่ผม +1นะ #ทีมLaravel :) แต่ ตัวอื่นก็น่าสนใจไม่แพ้กัน
|
|
|
|
|
Date :
2016-06-28 23:11:38 |
By :
dudesaranyu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมใช้ Class Medoo ลองใช้จะติดใจ
Compatible
Supports all SQL databases, including MySQL, MSSQL, SQLite, MariaDB, PostgreSQL, Sybase, Oracle and more
|
|
|
|
|
Date :
2020-12-23 12:15:48 |
By :
Tj |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|