แก้ปัญหา Single Quote ในคำสั่ง SQL Query ทำให้ Insert Update ข้อมูลไม่ได้

แชร์ประสบการณ์เขียนโค้ด php + Mysql เล็ก ๆ น้อย ๆ เผื่อจะเป็นประโยชน์กับใครสักคน...
 
 
สำหรับนักพัฒนาระบบด้วย php หรือภาษาใด ๆ
รับรองว่าต้องเจอกับปัญหานี้อย่างเลียกเลี่ยงไม่ได้
เพราะบางทีข้อมูลที่เราจะเพิ่มเข้าไปยังฐานข้อมูลนั้น มันจะมีเครื่องหมาย "ต้องห้าม" อยู่บ่อย ๆ
สำหรับมืใหม่ ๆ ถ้าเจอเออเร่อนี้เข้าไป คงต้องกุมขมับกันเลยทีเดียว
 
ผมเองก็เจออยู่บ่อย ๆ ก็ได้อาจารย์ใหญ่ Google แล้วก็รุ่นพี่โปรแกรมเมอร์ที่เขียนบทความหรือตอบปัญหาไว้
ทำให้รู้วิธีการแก้ไขปัญหาต่าง ๆ และผ่านมันมาได้จนถึงทุกวันนี้
ภาษาไทยเราไม่ค่อยได้ใช้เครื่องหมายฟันเดี่ยว จึงไม่ค่อยเจอเออเร่อนี้
แต่ภาษาอังกฤษนั้น ได้ใช้บ่อยมาก จึงเลี่ยงที่จะเจอไม่ได้เลย
 
บทความนี้จึงถือโอกาสเอาปัญหาที่ต้องเจอกันบ่อย ๆ และต้องเจอกันทุกคนอยู่แล้ว
มาสรุปรวมถึงปัญหา สาเหตุ และแนวทางวิธีแก้ไข เผื่อท่านใดที่กำลังเจอปัญหานี้อยู่
จะได้มีข้อมูลให้ดูได้ง่าย ๆ และสามารถแก้ปัญหานี้ได้ โดยไม่ต้องเสียเวลา...
 
ตัวอย่างโค้ด คำสั่งที่ทำให้เกิดปัญหา
$name="I'm you.";
$sql="Insert into DB Set name='".$name."' ";
mysql_query($sql);
ตามตัวอย่างข้างต้น จะเห็นว่าในชื่อ จะมีเครื่องหมายฟังเดี่ยวอยู่ด้วย ซึ่งเวลาจะเพิ่มค่าเข้าไปในฐานข้อมูล
จะทำให้ไม่สามารถเพิ่มเข้าไปได้ เนื่องจากเครื่องหมายฟันเดี่ยวที่ว่านี้มันจะทำให้ระบบเข้าใจผิดและทำงานผิดพลาด
ประมาณว่า name='I'(อันนี้เป็นค่าที่ระบบมองเห็น ตามด้วย)m you.'

บางคนที่ยังไม่รู้ว่ามีฟังก์ชั่นสำเสร็จรูปให้ใช้ ก็อาจจะใช้คำสั่ง replace เพื่อเอาเครื่องหมายต้องห้ามนี้ออกเลยก็ได้
แต่เวลาแสดงผลมันก็จะไม่มีเครื่องหมายที่ว่า....นะสิครับ

เครื่องหมายต้องห้าม เช่น เครื่องหมายฟันเดี่ยว (single quote) และเครื่องหมายคอมม่า (,) เป็นต้น
อันนี้เจอกันได้บ่อย ๆ ครับ แต่ผู้พัฒนา php เขาก็คงจะรู้อยู่เหมือนกัน เขาจึงได้สร้างฟังก์ชั่นสำหรับแก้ไขปัญหาดังกล่าว

ฟังก์ชั่นที่จะช่วยได้ก็คือ function mysql_real_escape_string() ฟังก์ชั่นนี้ ..........นี่เอง

มันเป็น function ที่ทำหน้าที่ ใส่เครื่องหมาย   เข้าไปหน้า special characters  ครับ

วิธีใช้
$name=mysql_real_escape_string("I'm you.");
$sql="Insert into DB Set name='".$name."' ";
mysql_query($sql);
หรือ
$name="I'm you.";
$sql="Insert into DB Set name='".mysql_real_escape_string($name)."' ";
mysql_query($sql);
 
ลองเอาไปทดลองใช้กันดูนะครับ หากมีปัญหาอะไร ก็สอบถามกันเข้ามาได้ครับผ๋ม.............


My Article
แนะนำเว็บสูตรหวยออนไลน์ ดูฟรี