$select_stmt = $conn->prepare("SELECT * FROM book B INNER JOIN categories C on B.cat_id = C.cat_id WHERE B.book_nameTH Like '%".$bookKey."%' or B.book_nameEN Like '%".$bookKey."%' B.book_aut1 Like '%".$bookKey."%' or B.book_aut2 Like '%".$bookKey."%' or B.book_aut3 Like '%".$bookKey."%' or B.book_ISBN Like '%".$bookKey."%' or B.book_id Like '%".$bookKey."%' or B.book_ta Like '%".$bookKey."%'");
$select_stmt->execute();
การใช้ prepare แบบที่เขียน ไม่ได้ประโยชน์ ในเรื่อง sql injection เพราะ data request ไม่ได้ถูกแปลงค่า
ต้อง bind parameter เพื่อจะได้ทำการตรวจสอบ และ แปลงค่า ก่อน
ส่วนคำสั่ง where like ให้รวม field ที่ใช้ตรวจสอบ เหมือนกันก่อนตรวจสอบ จะได้สั้นลง
เปลี่ยนเป็น Code (PHP)
$param = "%{$bookKey}%";
$sql="SELECT * FROM book B INNER JOIN categories C on B.cat_id = C.cat_id
WHERE concat(B.book_nameTH,'|', B.book_nameEN,'|', B.book_aut1,'|', B.book_aut2,'|', B.book_aut3,'|', B.book_ISBN,'|', B.book_id,'|', B.book_ta) Like ? ";
$select_stmt = $conn->prepare( $sql);
$select_stmt->bind_param('s', $param);
$select_stmt->execute();