เขียนฟังก์ชั่นสำหรับ SELECT / INSERT / UPDATE / DELETE / CANCEL ข้อมูล
เพื่อลดความซ้ำซ้อนในการเขียนโปรแกรมด้วยภาษา PHP
ปกติแล้วเมื่อเริ่มฝึกเขียนโปรแกรม PHP การจัดการกับข้อมูลต่างๆในฐานข้อมูลนั้น เราจะต้องใช้คำสั่งเดียวกันซ้ำๆ อยู่หลายครั้ง ซึ่งแต่ละครั้งก็จะเปลี่ยนชื่อฟิลด์และตารางที่เก็บข้อมูลให้ตรงกับที่เราต้องการ วิธีการที่รวดเร็วที่สุดคือการคัดลอกซอร์สโค๊ดเดิม แล้วมาดัดแปลงแก้ไข
ในบทความก่อนหน้านี้ได้แนะนำเครื่องมือสร้างเองสำหรับช่วยลดเวลาการเขียนโค๊ดให้น้อยลงด้วยวิธีการ สร้างตัวแปร และโค๊ด SQL สำหรับ INSERT ลงฐานข้อมูล MySQL จะช่วยให้เราไม่ต้องนั่งพิมพ์ชื่อฟิลด์ให้ยุ่งยากอีกต่อไป แค่คัดลอกมาจากหัวตารางของ phpMyAdmin แล้ววางลงในแบบฟอร์มกดสร้างคำสั่งได้ทันที
ถ้าได้ลองเข้าไปใช้งานดูจะพบว่าผลลัพธ์ที่ได้นั้นมีให้เลือกใช้อยู่ด้วยกัน 3 แบบ สำหรับเริ่มแรกที่ผมเขียนโปรแกรม PHP นั้นนิยมแบบที่ 1 ที่สุด แต่พอเขียนไปนานเข้าๆ ก็ได้รู้จักการสร้างฟังก์ชั่นใช้เอง และ CodeIgniter Framework ทำให้รูปแบบการเขียนโปรแกรมเปลี่ยนไปมากทีเดียว
บทความนี้ผมจะมาแนะนำการสร้างฟังก์ชั่นเพื่อรองกับกับการ สร้างตัวแปร และโค๊ด SQL สำหรับ INSERT ลงฐานข้อมูล MySQL ในแบบที่ 2 ซึ่งได้ผลลัพธ์ในรูปแบบอาร์เรย์ เพื่อนำมาใช้งานกับฟังก์ชั่นที่จะสร้างขึ้นมานี้
1. ไฟล์เชื่อมต่อฐานข้อมูล (ถ้ามีอยู่แล้วก็ใช้ไฟล์เดิม) ในตัวอย่างจะใช้ include/connect.php
2. สร้างไฟล์ db_manage.php เก็บไว้ในโฟลเดอร์ function จะได้พาธเป็น ( function/db_manage.php)
3. นำฟังก์ชั่นที่สร้างแล้วไปใช้งานในหน้าต่างๆ ด้วยคำสั่ง include 'function/db_manage.php';
PHP CI MANIA - PHP Code Generator
เพื่อลดความซ้ำซ้อนในการเขียนโปรแกรมด้วยภาษา PHP
ปกติแล้วเมื่อเริ่มฝึกเขียนโปรแกรม PHP การจัดการกับข้อมูลต่างๆในฐานข้อมูลนั้น เราจะต้องใช้คำสั่งเดียวกันซ้ำๆ อยู่หลายครั้ง ซึ่งแต่ละครั้งก็จะเปลี่ยนชื่อฟิลด์และตารางที่เก็บข้อมูลให้ตรงกับที่เราต้องการ วิธีการที่รวดเร็วที่สุดคือการคัดลอกซอร์สโค๊ดเดิม แล้วมาดัดแปลงแก้ไข
ในบทความก่อนหน้านี้ได้แนะนำเครื่องมือสร้างเองสำหรับช่วยลดเวลาการเขียนโค๊ดให้น้อยลงด้วยวิธีการ สร้างตัวแปร และโค๊ด SQL สำหรับ INSERT ลงฐานข้อมูล MySQL จะช่วยให้เราไม่ต้องนั่งพิมพ์ชื่อฟิลด์ให้ยุ่งยากอีกต่อไป แค่คัดลอกมาจากหัวตารางของ phpMyAdmin แล้ววางลงในแบบฟอร์มกดสร้างคำสั่งได้ทันที
ถ้าได้ลองเข้าไปใช้งานดูจะพบว่าผลลัพธ์ที่ได้นั้นมีให้เลือกใช้อยู่ด้วยกัน 3 แบบ สำหรับเริ่มแรกที่ผมเขียนโปรแกรม PHP นั้นนิยมแบบที่ 1 ที่สุด แต่พอเขียนไปนานเข้าๆ ก็ได้รู้จักการสร้างฟังก์ชั่นใช้เอง และ CodeIgniter Framework ทำให้รูปแบบการเขียนโปรแกรมเปลี่ยนไปมากทีเดียว
บทความนี้ผมจะมาแนะนำการสร้างฟังก์ชั่นเพื่อรองกับกับการ สร้างตัวแปร และโค๊ด SQL สำหรับ INSERT ลงฐานข้อมูล MySQL ในแบบที่ 2 ซึ่งได้ผลลัพธ์ในรูปแบบอาร์เรย์ เพื่อนำมาใช้งานกับฟังก์ชั่นที่จะสร้างขึ้นมานี้
1. ไฟล์เชื่อมต่อฐานข้อมูล (ถ้ามีอยู่แล้วก็ใช้ไฟล์เดิม) ในตัวอย่างจะใช้ include/connect.php
<?php
$dbHost = "localhost";
$dbUser = "sunzandesign";
$dbPass = "13579";
$objConnect = mysql_connect($dbHost,$dbUser,$dbPass) or die(mysql_error());
$objDB = mysql_select_db("test");
mysql_query('SET NAMES UTF8');
?>
2. สร้างไฟล์ db_manage.php เก็บไว้ในโฟลเดอร์ function จะได้พาธเป็น ( function/db_manage.php)
<?php
/**
* คืนสถานะเรคอร์ดที่ถูกยกเลิก
* @param String $tablename ชื่อตาราง
* @param String $array กำหนดตัวเลือกอื่นๆ
*/
function select($tablename, $array = array(), $debug = NULL){
$array['select'] = (isset($array['select']) && $array['select']!='') ? $array['select'] : '*';
$array['where'] = (isset($array['where']) && $array['where']!='') ? $array['where'] : '1';
$array['join'] = (isset($array['join']) && $array['join']!='') ? $array['join'] : '';
$array['group_by'] = (isset($array['group_by']) && $array['group_by']!='') ? 'GROUP by '.$array['group_by'] : '';
$array['order_by'] = (isset($array['order_by']) && $array['order_by']!='') ? 'ORDER by '.$array['order_by'] : '';
$array['limit'] = (isset($array['limit']) && $array['limit']!='') ? 'LIMIT '.$array['limit'] : '';
$sql = "SELECT $array[select] FROM $tablename $array[join] WHERE $array[where] $array[group_by] $array[order_by] $array[limit]";
if($debug == 'debug') echo $sql;
$qry = mysql_query($sql) or die(mysql_error());
if($qry){
return mysql_fetch_assoc($qry);
}
}
/**
*
* ฟังก์ชั่นสำหรับสร้างคำสั่ง insert ทำงานภายใต้ไฟล์ config ระบบและการเชื่อมต่อฐานข้อมูลแล้ว
* @param String $table ชื่อฐานข้อมูล.ตาราง ที่ใช้
* @param Array $arr_data อาร์เรย์ข้อมูลที่ key=ชื่อฟิลด์ในตาราง ส่วน value = ข้อมูลที่จะบันทึก
* @return Sting ที่เป็นคำสั่ง SQL
*/
function insert($table, $arr_data)
{
$key_sign = '';
$val_sign = '';
$field_name = '';
$field_value = '';
foreach($arr_data as $key=>$val)
{
$field_name .= $key_sign.$key;
$field_value .= $val_sign. addslashes($val);
if($key_sign==''){ $key_sign = ', ';}
if($val_sign==''){ $val_sign = "', '";}
}
$result = mysql_query("INSERT INTO $table ($field_name) VALUES ('$field_value')") or die(mysql_error());
if($result) return mysql_insert_id();
}//function
/**
*
* ฟังก์ชั่นสำหรับสร้างคำสั่ง update ทำงานภายใต้ไฟล์ config
* @param String $table ชื่อฐานข้อมูล.ตาราง ที่ใช้
* @param Array $arr_data อาร์เรย์ข้อมูล key=ชื่อฟิลด์ที่จะอัพเดต ส่วน value = ข้อมูลใหม่
* @param String $where_condition เงื่อนไขการอัพเดต
* @return Sting ที่เป็นคำสั่ง SQL
*/
function update($table, $arr_data, $where_condition){
if($table != '' && count($arr_data) && $where_condition!=''){
$sign='';
$set_field = '';
foreach($arr_data as $field=>$value)
{
$set_field .= $sign."$field='". addslashes($value) ."'";
if($sign==''){ $sign = ', ';}
}
echo "UPDATE $table SET $set_field WHERE $where_condition";
return mysql_query("UPDATE $table SET $set_field WHERE $where_condition") or die(mysql_error());
}
}
/**
* ลบข้อมูลในเรคอร์ดนั้นอย่างถาวร
* @param String $table ชื่อตาราง
* @param String $where_condition เงื่อนไขที่ใช้ลบ
*/
function delete($table, $where_condition){
if($table != '' && $where_condition!=''){
return mysql_query("DELETE FROM $table WHERE $where_condition") or die(mysql_error());
}
}
/**
* ยกเลิกการใช้เรคอร์ดนั้น (กรณีที่ไม่ต้องการลบ)
* @param String $tablename ชื่อตาราง
* @param String $cond เงื่อนไขที่ใช้ค้นหา
*/
function cancel($tablename, $cond){
$array = array('status' => STATUS_CANCEL);
return update($tablename, $array, $cond);
}
/**
* คืนสถานะเรคอร์ดที่ถูกยกเลิก
* @param String $tablename ชื่อตาราง
* @param String $cond เงื่อนไขที่ใช้ค้นหา
*/
function active($tablename, $cond){
$array = array('status' => STATUS_ACTIVE);
return update($tablename, $array, $cond);
}
?>
3. นำฟังก์ชั่นที่สร้างแล้วไปใช้งานในหน้าต่างๆ ด้วยคำสั่ง include 'function/db_manage.php';
<?php
/*---------------------------- ตัวอย่างการใช้งาน ----------------------------*/
include 'include/connect.php';
include 'function/db_manage.php';
$myTable = 'tb_payment';//กำหนดชื่อตาราง
/*---------------------------- ตัวอย่าง SELECT ----------------------------*/
$arrayOption = array(
"where" => "payment_amount > 4000",
"order_by" => "payment_amount"
);
$data = select($myTable, $arrayOption, 'debug');
/*---------------------------- ตัวอย่าง INSERT ----------------------------*/
$dataInsert = array(
'payment_customer_id' => 56234112, //$_POST['payment_customer_id'],
'payment_date' => '2013-05-30',//$_POST['payment_date'],
'payment_amount' => 2000,//$_POST['payment_amount'],
);
$id = insert($myTable, $dataInsert);
/*---------------------------- ตัวอย่าง UPDATE ----------------------------*/
$dataUpdate = array(
'payment_customer_id' => 56234112, //$_POST['payment_customer_id'],
'payment_date' => '2013-05-30',//$_POST['payment_date'],
'payment_amount' => 2000,//$_POST['payment_amount'],
);
$qry = update($myTable, $dataUpdate, "payment_id = 3");
/*---------------------------- ตัวอย่าง DELETE ----------------------------*/
$qry = delete($myTable, "payment_id = 3");
/*---------------------------- ตัวอย่างยกเลิก Record----------------------------*/
$qry = cancel($myTable, "payment_id = 3");
/*---------------------------- ตัวอย่างเปิดใช้ Record ----------------------------*/
$qry = active($myTable, "payment_id = 3");
?>

ขอบคุณมากครับสำหรับความรู้
ตอบลบ