PHP: ข้อควรระวังในการใช้ MetabaseSetSelectedRowRange

ปัญหาและการวิเคราะห์
วันนี้เจอ bug แปลก ๆ นั่นคือการใช้งานคำสั่ง MetabaseSetSelectedRowRange
ที่อยู่ใน Metabase library เพื่อจำกัดจำนวนของข้อมูลที่ต้องการ
แต่ดูเหมือนว่าจะใช้ไม่ได้ เพราะ query นานมาก นานเหมือน query มาทั้งหมด
จน timeout

โดยใน code นั้นก็เรียก MetabaseSetSelectedRowRange ตามปรกติ คือ

MetabaseSetSelectedRowRange($database, 0, $n);

โดย $n รับค่ามาจาก $_REQUEST ธรรมดา ๆ นี่แหล่ะ

$n = $_REQUEST['n'];

และไอ้ที่ทำให้มีปัญหาก็คือไอ้ $_REQUEST ธรรมดานี่แหล่ะ - -"
(เพราะ PHP จะถือว่าค่าใน $_REQUEST เป็นข้อมูลชนิด string)

เนื่องจากใน function MetabaseSetSelectedRowRange
มีการตรวจสอบชนิดของข้อมูลก่อนทำงานด้วย

และถ้าชนิดของ parameter ที่ใส่เข้าไปไม่ใช่ Integer มันจะไม่ทำงาน
จึงทำให้เสมือนว่าเราต้อง query ทั้งหมด script จึง run จน timeout ครับ

วิธีการแก้ไข
ก็คือทำให้ $n เป็น integer ซึ่งทำได้ 2 วิธี

1. แปลงชนิดข้อมูลตั้งแต่ assign ให้ $n

$n = intval($_REQUEST['n']);

2. แปลงชนิดข้อมูลตอนจะใช้งาน

MetabaseSetSelectedRowRange($database, 0, intval($n));

เป็นอันเสร็จครับผม

หมายเหตุ จริง ๆ แล้ว Metabase เป็น Library ที่ค่อนข้างเก่าแล้ว อาจจะไม่มีคนใช้แล้วก็ได้ - -"
แต่ที่เขียนเก็บไว้ก็เพราะว่า อยากให้เห็นแนวทางการวิเคราะห์สาเหตุ และแก้ปัญหาครับผม