codeigniter

วิธีการ query คำสั่ง sql จากฐานข้อมูลด้วย codeigniter

Codeigniter มากันอีกแล้ว ยังคงเป็น php framework ที่ได้รับความนิยมในการเลือกหยิบมาใช้งานกันอยู่อย่างแพร่หลายนะครับ สำหรับ ci เพราะทั้งความรวดเร็ว ความเบา ความยืดหยุ่น และความง่ายต่อการเรียนรู้ ต้องยกให้เป็นอันดับต้นๆของ php กันเลยทีเดียว แล้ววิธีการสร้างคำสั่ง sql เพื่อสั่งการกับฐานข้อมูลนั้น codeigniter เตรียมวิธีการใช้ให้กับเราอย่างไร จะยากง่ายแค่ไหน มาลองดูกันครับ

codeigniter

codeigniter

codeigniter และวิธีการ query คำสั่ง sql จากฐานข้อมูล

มาดูวิธีการเขียน Query ในรูปแบบของ codeigniter กันครับว่าจะมีรูปแบบวิธีทำได้อย่างไรบ้าง ปรกติแล้วทาง ci เตรียมความสามารถในเรื่องของ Active Records ไว้ให้เราใช้งานอย่างสะดวกแล้ว แต่เราก็ยังสามารถใช้งาน SQL เขียนตรงๆแบบที่เราเคยใช้งานได้อยู่ครับ

เริ่มจากในฐานข้อมูลของผมเป็๋นแบบนี้นะครับ

database สำหรับ codeigniter

database สำหรับ codeigniter

ก่อนอื่นเลย ก่อนจะเริ่มทำการเข้าถึงฐานข้อมูล เราจะสร้าง model ขึ้นมากันก่อน ตารางที่จะใช้เราชื่อ customer_tbl สำหรับเก็บข้อมูลในส่วนของรายชื่อลูกค้า แล้วเราจะทำงานผ่านทาง model นี้เพื่อส่งกลับไปในรูปแบบเดียวกับ MVC เพื่อทำงานให้เหมาะสม

file name : Customer_model.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Customer_model extends CI_Model 
{

public function __construct()
{
    parent::__construct();
}

public function getAllCustomer()
{
 
}

ผมสร้างไฟล์ชื่อ Customer_model.php อย่าลืมเรื่องตัวอักษรในชื่อ Class ที่ผมใช้เป็นนำหน้าด้วยตัวพิมพ์ใหญ่นะครับ ทีนี้ผมจะเขียน method ด้านในเป็น public ขึ้นมาชื่อว่า getAllCustomer แล้วผมจะทำการ Select ตรงๆแล้วดึงข้อมูลออกมาแบบทั้งหมดก่อนนะครับ จากนั้นจะทำการ load model นี้เข้ามาในระบบของเรา ที่ไฟล์ autoload.php ที่อยู่ใน folder ชื่อ config

$autoload['model'] = array('Customer_model');

จากนั้นผมจะทำการเขียน SELECT ลงไป ในส่วนของ function getAllCustomer() แบบนี้นะครับ

 

$query = "SELECT * FROM customer_tbl";
$customer = $this->db->query($query)->result();
return $customer;

ในส่วนนี้ผมทำการสั่งให้ query คำสั่ง sql ที่บรรทัดที่สองโดยเมื่อได้ข้อมูลออกมาเราจะต้องการ fetchall หรือ fetchrow ในรูปแบบเดิมแต่ตอนนี้ทาง ci เค้าได้เตรียม function สำหรับใช้ในการแปลงค่าที่ได้ออกมาให้อยู่ในรูปแบบ Object ง่ายๆด้วยคำสั่ง result() แล้วผมก็ส่งค่า return กลับออกมาจาก model ไปยัง controller ด้วยเลย

ทีนี้ผมก็จะทำการสร้าง controller สำหรับไว้เรียก model ออกมาแสดงโดยจะตั้งชื่อว่า home


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller 
{

 public function index()
 {
 
 }
}

แล้วก็สร้าง view ขึ้นมาอีกไฟล์โดยใช้ชื่อ home.php

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>Query SQL</title>

 <?php echo css_asset('bootstrap.css'); ?>
 <?php echo css_asset('font-awesome.css'); ?>
 <?php echo css_asset('modal-header.css'); ?>
 <?php echo css_asset('style.css'); ?>
 <?php 
 echo css_asset('../plugins/datatable/css/bootstrap.datatable.min.css'); 
 ?>

 <?php echo js_asset('jquery.min.js'); ?>
 <?php echo js_asset('bootstrap.js'); ?>
 <?php echo js_asset('../plugins/datatable/js/jquery.dataTables.min.js'); ?>
 <?php echo js_asset('../plugins/datatable/js/bootstrap.datatable.js'); ?>
</head>
<body>

<div class="container">
 <div class="panel panel-default">
 <div class="panel-heading">
 Query SQL With CodeIgniter!
 </div>
 <div class="panel-body">
 <table class="table table-bordered">
 <thead>
 <tr>
 <th>No.</th>
 <th>Firstname</th>
 <th>Lastname</th>
 <th>Email</th>
 <th>Country</th>
 <th>IP Address</th>
 </tr>
 </thead>
 <tbody>
 
 </tbody>
 </table>
 </div>
 <div class="panel-footer">
 Page rendered in 
 <strong>{elapsed_time}</strong> seconds
 </div>
 </div>
</div>
<script>
 $(document).ready(function(){
 $(".table").DataTable();
 });
</script>
</body>
</html>

แล้วเราก็จะไปเรียก model ในส่วนของ method ที่เราสร้างกันไว้ออกมาด้วย code นี้ซึ่งจะได้รับค่าที่ออกมาจากการ return กลับมาจาก model ที่เราไป query แล้วนั้นเอง

$customer = $this>Customer_model->getAllCustomer();
$data = array('customer' => $customer);
 $this->load->view('home',$data);

แล้วจากนั้นก็ เอาข้อมูลไปไว้ในตัวแปรชื่อ data ในรูปแบบของ array แล้วส่งออกมากลับการ load view ชื่อ home ที่เราสร้างเอาไว้เมื่อกี้

แล้วเราก็จะเอาไปวางใน view ผ่านทางการเข้าถึงในรูปแบบของ Object ที่ได้รับมาจาก function result()  ในลักษณะ -> เพื่อเรียก column เข้ามาใช้ แล้วก็ทำการวนลูปด้วย foreach()

<?php
 $iNUm = 1;
 foreach ($customer as $customer) {
 ?>
 <tr>
 <td><?php echo $iNUm; ?></td>
 <td><?php echo $customer->first_name; ?></td>
 <td><?php echo $customer->last_name; ?></td>
 <td><?php echo $customer->email; ?></td>
 <td><?php echo $customer->country; ?></td>
 <td><?php echo $customer->ip_address; ?></td>
 </tr>
 <?php
 $iNUm++;
 } // end foreach
 ?>
view

view

ส่วนในเรื่องของการใช้ function เพื่อเข้าถึงข้อมูลในตารางนั้นก็ทำได้มากกว่าแค่ result() เพียงอย่างเดียว ยังสามารถใช้งานดังนี้ได้อีกด้วยครับ

$query = "SELECT * FROM customer_tbl";
$customer = $this->db->query($query)->result_array();
 return $customer;

ในรูปแบบนี้เป็นการใช้งาน function result_array() ค่าของข้อมูลที่ได้ออกมาจะอยู่ในรูปแบบของ array แทนดังนั้นเวลาจะแสดงข้อมูลใน view จะไม่สามารถใช้แบบเดิมได้แต่ต้องทำแบบนี้แทนครับ

<?php
 $iNUm = 1;
 foreach ($customer as $customer) {
 ?>
 <tr>
 <td><?php echo $iNUm; ?></td>
 <td><?php echo $customer['first_name']; ?></td>
 <td><?php echo $customer['last_name']; ?></td>
 <td><?php echo $customer['email']; ?></td>
 <td><?php echo $customer['country']; ?></td>
 <td><?php echo $customer['ip_address']; ?></td>
 </tr>
 <?php
 $iNUm++;
 } // end foreach
 ?>

และทั้ง 2 function คือ result() กับ result_array() ก็จะให้ผลของข้อมูลออกมาทั้งหมดหลาย record ตามที่เราค้นเจอจากการ query ของ sql นะครับ ทาง codeigniter ก็เหมือนรู้เลยเตรียม function ที่เราต้องการอย่าง fetchrow มาให้ด้วยส่วนวิธีการเรียกใช้ก็จะเปลี่ยนจาก result เป็น row() กับ row_array() แทนนั้นเองครับ ซึ่งแน่นอนว่าข้อมูลที่ได้ออกมานั้นจะเป็นข้อมูลเพียงแค่ 1 record ในรูปแบบของ Object จาก row() หรือรูปแบบ array จาก row_array() นั้นเองครับ ซึ่งข้อมูลมีแค่ข้อมูลเดียวเท่านั้นนะครับ

อ้างอิง : www.codeigniter.com

แล้วก็เสริมอีกนิดครับว่า ้าต้องการให้ row แสดงข้อมูลมากกว่า 1 record เราก็ยังสามารถใส่หรือระบุค่าลงไปใน row ได้เลยนะครับ แบบนี้ เช่น row(10);

วันนี้ยาวมากแล้ว น่าจะเข้าใจถึงการใช้งานคำสั่งต่างๆเพื่อที่จะ query ข้อมูลในส่วนของ SQL ออกมาใช้งานกันได้แล้วนะครับ เดี๋ยวไว้เรามาต่อกันด้วยเรื่องของ Active Record กันบ้างซึ่งจะช่วยให้เราไม่ต้องเขียนคำสั่ง SQL  เองทั้งหมด ขอให้สนุกกับการเขียน Code ทุกวันนะครับ