Archive for the 'วิธีแก้ปัญหาเขียนโปรแกรม' Category

วิธีเรียกใช้ Call Stored Procedure ของ PHP 5.2.6

พอดีผมมีปัญหาในการเรียก Stored Procedure ด้วย mysql_query แบบธรรมดาซึ่งมันขึ้นว่า Stored Procedure Context ไม่เหมือนกัน หลังจากที่ไปลองๆอ่านจากหลายๆเว็บแล้ว ผมว่าคงเป็นปัญหาของ Version นี้ทางแก้ก็คือต้องรอ Version ต่อไป หรือไม่ก็ใช้ PDO ซะ !!

PDO คือตัวติดต่อกับฐานข้อมูลซึ่งไม่ได้ติดต่อได้เฉพาะ MySQL แต่ติดต่อได้มากมายไม่ว่าจะเป็น Oracle , MS SQL , PostgreSQL ฯลฯ ส่วนวิธีเรียกใช้นั้นไม่ยากเพียงแต่ต้องไปเปิด extension ของ php นะครับซึ่งใครจะใช้สำหรับ Database ตัวไหนมันจะเป็นชื่อประมาณนี้ pdo_Database เมื่อเปิดเสร็จแล้วมาดูวิธีการใช้งานเรียก Stored Procedure กันซึ่งเหมือนกับการ Query ข้อมูลเดะๆ

$pdo = new PDO('mysql:dbname=duocorevp;host=127.0.0.1;port=8889', 'root', 'root');
print '<h3>PDO: simple select</h3>';
foreach($pdo->query('call countUsers();') as $row)
{
 print_r($row);
}

สังเกตุได้ว่าเหมือน Query เปะแต่จะเป็นแนวใช้ Object แทนแบบ functional เพิ่มเติดอีกนิดถ้าเรารู้อยู่แล้วว่ามันจะออกมาแถวเดียวเราสามารถทำแบบนี้ได้เลยนะครับ

$result = $pdo->query('call countUsers()')->fetch();

แต่การเขียนแบบนี้ ก็อาจมีข้อผิดพลาดเกิดขึ้นได้ในกรณีที่ไม่มีค่าส่งกลับมา ดังนั้นเราควรเขียนดักไว้สักเล็กน้อยแบบนี้

if($pdo->query('call countUsers()'))
$result = $pdo->fetch();
else
    $result = null;

แบบนี้เป็นต้นครับ ไม่ยากเลยใช่ไหมครับวันนี้ผมลาไปก่อนแล้วครับ :)

10 ข้อแนะนำเวลาใช้ PHP MVC Framework

ห่างหายไปนานพอตัวแถมยังติดค้าง Barcamp Bangkok วันที่ 2 อีกถ้าว่างแล้วเดียวผมจะรีบเขียนเลยครับผม :) เอาละเข้าเรื่องกันเลยวันนี้ผมจะฝากข้อแนะนำง่ายๆไว้ละกันครับ 10 ข้อ

  1. แยก Business Logic ให้ออกจาก View อย่างชัดเจน เช่น ในโค้ดส่วนของ View ไม่ควรมีประมาณนี้ครับ
    if(user_login() && not_admin()) ควรจะเปลี่ยนให้เป็นตัวแปรแค่นี้พอ if($logged_in_and) เพื่อความง่ายในการอ่านและแยกส่วน Business Logic
  2. พยายามอย่าเขียนโค้ดซ้ำ ถ้ารู้ตัวว่ากำลังเขียนโค้ดซ้ำ ให้พยายามหาทางแก้ เช่น เขียน function is_login() ใน user class เพื่อถามว่า login รึยัง แต่ดันใช้ function นี้ในคลาสอื่นๆ ดังนั้นเราควรจะย้าย function is_login() ไปอยู่ภายใต้คลาสแม่ที่แต่ละ class อื่นๆของเราถูก implement ขึ้นมาเช่น Controller
  3. หลายๆ Framework จะไม่มีการกำหนดว่าเราต้องกำหนดชื่อในไฟล์และโฟลเดอร์ view อย่างไร และเวลาเรียกก็ต้องทำเอง ผมมีสิ่งที่ผมลองมาแล้ว รู้สึกว่าไม่ได้ผลคือการที่พยายามจะเรียก view ที่ประกอบกัน เช่นมี header footer จากภายใน Controller สรุปแล้วมันยุ่งเหยิงมาก ส่วนวิธีแก้ก็คือในไฟล์ view แต่ละหน้านั้นให้ include header footer ลงไปเลย แต่พยายามใช้เป็นแบบ function ทำเองจะได้ปรับแก้ไขสะดวกเพราะมันจะมีพวก parameter บางอย่างที่ต้องเปลี่ยนไปในแต่ละหน้าแต่ใช้ header ตัวเดียวกัน เช่น title
  4. เรื่องการ validation และเรื่องจัดการเวลาเกิด error เป็นสิ่งที่ไม่ควรละเลย เพราะเราต้องทำการ validation กันอยู่หลายๆหน้า ซึ่งมีลักษณะคล้ายกันดังนั้น ถ้าเขียนไม่ดีละก็เสียเวลาเขียนซ้ำบ่อยแน่
  5. ค่า Default เป็นเรื่องที่ไม่ควรละเลย เช่น ถ้าตัวแปรนี้ไม่ได้ถูก set มาควรมีค่าเป็นอะไรเพราะใช้บ่อยในพวก form
  6. ควรหา Editor ที่สามารถใช้กับ PHP Framework ของคุณได้ เพื่อประหยัดเวลาในการหา function ฯลฯ
  7. ก่อนลงมือเขียนจริง ควรสร้าง Class Diagram และ ER-Diagram ก่อน แต่ถ้าคุณไม่ถนัด เวลาทำงานเมื่อคุณสะกิดใจว่ามันผิดแปลก อย่าฝืนทำต่อแต่ต้องแก้ ให้เป็นไปอย่างที่มันควรจะเป็นซะ อย่าปล่อยปัญหาไว้
  8. ถ้า Framework ไม่มี Unit Test มาให้ควรใช้พวก Unit Test ของตัวอื่นมาใช้ซะ เพื่อระบบที่มีคุณภาพ เช่น Firephp เป็นตัวหนึ่งที่ใช้ได้
  9. หัดทำบ่อยๆจะได้ชิน และควรตั้งเป้าหมายให้มากขึ้น เช่น รองรับ i18n , การเปลี่ยน template ฯลฯ
  10. ค้นหา plugin ต่างๆก่อนที่คิดจะสร้างขึ้นมา ไม่แน่ว่าจะได้งานที่ดีกว่า และประหยัดเวลากว่า

วันนี้ก็ลากับ 10 ข้อง่ายๆสำหรับคนใช้ PHP MVC Framework นะครับ แต่ใช้ได้กับ Framework ตัวอื่นๆด้วยนะครับ โดยนี้คือความเห็นส่วนตัวของผมและงานที่ผมทำคือ Web Application ซึ่งมีอะไรมากมายจริงๆ

Next Page »