เขียนฟังก์ชั่นสำหรับ 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"); ?>
ขอบคุณมากครับสำหรับความรู้
ตอบลบ