ข้ามไปที่เนื้อหาหลัก

สร้างฟังก์ชั่น เพื่อลดความซ้ำซ้อนในการเขียนโปรแกรม

เขียนฟังก์ชั่นสำหรับ SELECT / INSERT / UPDATE / DELETE / CANCEL ข้อมูล
เพื่อลดความซ้ำซ้อนในการเขียนโปรแกรมด้วยภาษา 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");

?>




PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม

สนใจสั่งซื้อเพียง 4,500 บาท
http://fastcoding.phpcodemania.com/

ความคิดเห็น

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สอนเขียน PHP แสดงการจองห้องประชุมแบบไฮไลท์ตามช่วงเวลา (แบบเชื่อมต่อฐานข้อมูล MySQL)

ตัวอย่าง ผลลัพธ์ที่ได้จากการจองในฐานข้อมูล ตาราง tb_room สร้างตารางรายชื่อห้องประชุม สำหรับ id นั้นเป็น Primarykey จะกำหนดให้สร้างอัตโนมัติ ทุกครั้งที่เราเพิ่มชื่อห้องประชุมใหม่ -- -- Database: `tobedev_example` -- -- -------------------------------------------------------- -- -- Table structure for table `tb_room` -- CREATE TABLE IF NOT EXISTS `tb_room` (   `id` int(11) NOT NULL,   `name` varchar(30) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- -- Dumping data for table `tb_room` -- INSERT INTO `tb_room` (`id`, `name`) VALUES (1, 'ห้องประชุม 1'), (2, 'ห้องประชุม 2'), (3, 'ห้องประชุม 3'), (4, 'ห้องประชุม 4'), (5, 'ห้องประชุม 5'); -- -- Indexes for dumped tables -- -- -- Indexes for table `tb_room` -- ALTER TABLE `tb_room`   ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tb_room` -- ALTER TABLE `tb_room`   MODIFY `i...

การนำไอคอน มาแสดงบน Fullcalendar

เนื่องจากมีน้องคนหนึ่งให้ช่วยดูโค้ดเกี่ยวกับ Fullcalendar ให้หน่อย แล้วพอดีช่วงนี้ผมก็กำลังสนใจปฏิทิน Fullcalendar อยู่พอดี จึงลองหาสาเหตุที่ไม่สามารถแสดงข้อมูลจาก MySQL และไม่สามารถแทรก icon เข้าไปใน Fullcalendar ได้ จากที่สังเกตุได้ครั้งแรกคือ Error ที่ Console ของ Firefox เกี่ยวกับฟังก์ชั่นที่เขียนผิด และก็มีการ echo ค้างไว้ในส่วนของไฟล์ getCalendar.php ก็เลยจัดการทดสอบแล้วลบ echo ออกให้เหลือแค่ echo json_encode($event_array); ที่ได้ใช้งานจริงเท่านั้น ขั้นตอนการตรวจสอบความถูกต้องของโค้ด PHP 1) ต้องแน่ใจว่าคำสั่งที่เขียนไว้ สามารถดึงข้อมูลมาแสดงผลได้ด้วยการ echo $sql; 2) นำคำสั่งที่ได้ไปรันในโปรแกรมจัดการฐานข้อมูล ในที่นี้คือ phpMyAdmin 3) เมื่อตรวจสอบดูผลลัพธ์ที่ได้ หากถูกต้องมีข้อมูลก็แสดงว่าการ Query ทำงานได้ 4) มาดูการทำงานของ JavaScript ในส่วนของ jQuery มีการแจ้งเตือนที่ฟังก์ชั่น .on() ซึ่งจะใช้กับ jQuery เวอร์ชั่นใหม่เท่านั้น นั่นหมายถึงเวอร์ชั่น jQuery ที่มากับ Fullcalendar เป็นเวอร์ชั่นเก่า ก็ให้เปลี่ยนไปใช้ .live() แทน ก็จะทำงานได้ปกติ 5) ม...