10 บั๊ก PHP ยอดฮิตที่มือใหม่มักพลาด

คุณเขียนโค้ด รีเฟรชหน้าเว็บ แล้วก็เจอหน้าจอสีขาวว่างเปล่า

สิ่งนี้เกิดขึ้นเพราะโดยปกติแล้ว PHP จะไม่แสดงข้อผิดพลาดออกมา (fails silently) หากคุณไม่เห็นข้อผิดพลาด คุณก็ไม่สามารถแก้ไขมันได้

เริ่มการพัฒนาของคุณด้วยการเพิ่มบรรทัดเหล่านี้ไว้ที่ส่วนบนสุดของไฟล์:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

คำสั่งนี้จะบังคับให้ PHP แสดงสิ่งที่ผิดพลาดออกมา แต่อย่าใช้คำสั่งนี้ในระบบที่ใช้งานจริง (production)

นี่คือ 10 บั๊กที่พบบ่อยและวิธีแก้ไข

  1. ลืมใส่เครื่องหมายเซมิโคลอน (Missing Semicolons) PHP จำเป็นต้องมีเครื่องหมายเซมิโคลอนเพื่อจบคำสั่ง หากคุณลืมใส่ สคริปต์จะหยุดทำงาน วิธีแก้: ลงท้ายบรรทัดด้วยเครื่องหมายเซมิโคลอนเสมอ

  2. การเปรียบเทียบแบบไม่เข้มงวด (Loose Comparison) ตัวดำเนินการ == จะเปลี่ยนประเภทข้อมูลก่อนทำการเปรียบเทียบ ซึ่งอาจนำไปสู่ผลลัพธ์ที่ผิดพลาด วิธีแก้: ใช้ === เพราะจะตรวจสอบทั้งค่า (value) และประเภทข้อมูล (type)

  3. ตัวแปรที่ไม่ได้กำหนดค่า (Undefined Variables) การใช้ตัวแปรที่คุณไม่ได้สร้างขึ้นจะทำให้เกิดข้อผิดพลาดทางตรรกะ (logic errors) วิธีแก้: ใช้ null coalescing operator $name = $_GET['name'] ?? 'Guest';

  4. ขอบเขตของตัวแปร Global (Global Variable Scope) ฟังก์ชันไม่สามารถมองเห็นตัวแปรที่อยู่นอกขอบเขตของมันได้ วิธีแก้: ส่งตัวแปรเข้าไปในฟังก์ชันในรูปแบบของพารามิเตอร์ (parameters)

  5. SQL Injection การนำข้อมูลจากผู้ใช้ไปใส่ในคำสั่ง query โดยตรงนั้นอันตรายมาก เพราะผู้โจมตีสามารถขโมยข้อมูลของคุณได้ วิธีแก้: ใช้ prepared statements ร่วมกับ placeholders

  6. Cross-Site Scripting (XSS) การแสดงผลข้อมูลดิบจากผู้ใช้บนหน้าจอ อาจทำให้สคริปต์ที่เป็นอันตรายทำงานบนเบราว์เซอร์ได้ วิธีแก้: ใช้ htmlspecialchars() กับข้อมูลที่แสดงผลทั้งหมด

  7. ข้อผิดพลาดเกี่ยวกับ Header (Header Errors) คุณไม่สามารถส่ง header ได้ หากมีการส่งข้อความหรือช่องว่างไปยังเบราว์เซอร์ไปก่อนหน้านั้นแล้ว วิธีแก้: วางคำสั่ง header() ไว้ที่ส่วนบนสุดของไฟล์เสมอ และใช้ exit() ทุกครั้งหลังจากการ redirect

  8. ลืมตรวจสอบ Key ใน Form (Missing Form Keys) การเข้าถึง key ของฟอร์มที่ไม่มีอยู่จริงจะทำให้เกิดข้อผิดพลาด วิธีแก้: ใช้ null coalescing operator เพื่อกำหนดค่าเริ่มต้น (default value)

  9. การใช้ Include เทียบกับ Require (Include vs Require) คำสั่ง include จะแจ้งเพียงแค่คำเตือน (warning) หากไม่พบไฟล์ แต่สคริปต์จะยังคงทำงานต่อไปและอาจไปพังในภายหลัง วิธีแก้: ใช้ require_once สำหรับไฟล์ที่สำคัญ เช่น การเชื่อมต่อฐานข้อมูล

  10. ไม่ได้ตรวจสอบค่าที่ส่งกลับมา (Unchecked Return Values) ฟังก์ชันหลายอย่างใน PHP จะส่งค่า false กลับมาหากทำงานล้มเหลว การนำค่า false นั้นไปใช้ในขั้นตอนถัดไปจะทำให้โปรแกรมพัง วิธีแก้: ตรวจสอบก่อนว่าฟังก์ชันส่งค่า false กลับมาหรือไม่ ก่อนที่จะนำผลลัพธ์ไปใช้งาน

สรุปเพื่อการเขียนโค้ดที่ดีขึ้น: • เปิดการรายงานข้อผิดพลาด (error reporting) ในระหว่างการพัฒนา • ใช้ === แทน == • ตรวจสอบค่าที่ส่งกลับมา (return values) • ทำความสะอาดข้อมูล (sanitize) จากผู้ใช้ทั้งหมด

ที่มา: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh