ใช้ mysql_real_escape_string ตามที่พี่ mixture บอกจะช่วยได้มากกว่าเรื่อง sql injection นะคับ เรื่องของเรื่องคือการ escape character ให้เข้ากับ encoding ของ database connection คับ แต่ว่าจะทำงานช้ากว่า addslashes อยู่หน่อยนึง
ผมเสริมจากที่พี่ mixture บอกหน่อยนึงคือไม่ใช่แค่การรับค่าจากฟอร์ม เพราะ user input นั้นนอกจาก GET หรือ POST แล้ว ยังมี COOKIE ซึ่งไม่ได้มากับฟอร์มด้วยคับ
อีกเรื่องคือถ้าข้อมูลเป็นตัวเลขแน่นอน ไม่จำเป็นต้องทำการ escape ใดๆเลยก็ได้ สามารถใช้ type casting ให้เป็นตัวเลขแล้วนำไปใช้ได้เลย เช่น
if (empty($_GET['user_id']) OR ! $user_id = (int) $_GET['user_id'])
{
die('ค่า User ID ต้องมีค่ามากกว่า 0 ขึ้นไป');
}
$sql = 'SELECT * FROM users WHERE user_id=' . $user_id;
ปล แต่เอาเข้าจริงๆแล้ว ตัวผมเองผมไม่แคร์ว่าข้อมูลจะมาจากไหน ก่อนสร้าง query ผมยังงัยก็ใช้ mysql_real_escape_string กับค่าที่เป็น string ตลอดแหละ แถมถ้าใช้ Codeigniter ผมแทบไม่แคร์เรื่อง escape เลย เหอๆ