Next.js භාවිතයෙන් සාමාන්ය පේජ් කිරීමක් සකස් කරන විට, ඔබේ කේතය සම්පූර්ණයෙන්ම සුරක්ෂිතයි කියලා හිතන්න පුළුවන්. නමුත් MySQL එකේ සුවිශේෂී සීමාවක් ඔබට හදිසි ගැටළුවක් වශයෙන් පෙනෙයි.
ලේඛකයා, තවත් බොහෝ සංවර්ධකයෙකු වැනි, prepared statements සහ placeholders භාවිතා කරමින්, SELECT * FROM writings ORDER BY created_at DESC LIMIT ? OFFSET ? යන පරිදි කුමාරීකරණයක් (parameterization) කළේය. පරාමිතීන් සම්පූර්ණයෙන්ම integer ලෙස පරීක්ෂා කර, floor කර, සීමා කර, ආරක්ෂිත ලෙස සකස් කර තිබුණා.
ඒත් MySQL, PostgreSQL වගේම, LIMIT සහ OFFSET සඳහා placeholders සපයන්නේ නැත. එම නිසා රන්ටයිම් දෝෂයක් පෙන්වයි. මෙය ලේඛකයාගේ කේතය වැරදි නැති බව පෙන්වන්නේ නැති, පමණක් MySQL හි අඩුපාඩුවක් බවයි.
සැලසුම සරලයි: placeholders වෙනුවට integer අගයන් සෘජුවම query එකට ඇතුළත් කරන්න. උදාහරණයක් ලෙස:
const limitInt = Math.floor(limitNum); const offsetInt = Math.floor(offset); const dataQuery = `SELECT * FROM writings ${whereClause} ORDER BY created_at DESC LIMIT ${limitInt} OFFSET ${offsetInt}`;
මෙම ක්රමය ආරක්ෂිතයි, මන්ද limitNum සහ offset පූර්ව පරීක්ෂා කර ඇති බැවින්, ඒවා භාවිතා කරන්නාගේ අක්රමික strings නොවේ. WHERE clause එකේ පරාමිතීන් පමණක් parameterized වේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ බොහෝ startups, වෙබ් සේවා, සහ අධ්යාපන ආයතන PostgreSQL සහ MySQL අතර මාරු කරගෙන යන අවස්ථා බහුලයි. මේ නිසා:
- සංවර්ධකයින්ට SQL dialect ගැටළු ගැන අවධානයෙන් සිටිය යුතුය, අනිසි දෝෂයන් නිසා production වල අඩුපාඩු නොසිදුවේ.
- සිසුන්ට SQL fundamentals වඩාත් ගැඹුරු ලෙස ඉගෙන ගැනීමට, ව්යාපාරික අවශ්යතා අනුව DBMS තේරීමේ වැදගත්කම තේරුම් ගත හැක.
- ව්යාපාර සඳහා, ORM භාවිතා කරන විටත් underlying DBMS වල විශේෂිත සීමා මත පදනම්ව code review ක්රියාවලියක් අත්යවශ්ය වේ.
මෙම මතකය, ලෝක පරිසරයේ SQL ප්රෝග්රෑම් කරුවන්ට “එකම SQL” යැයි සිතීමේ වැරදි වලින් මුදලේ ඉවතට යාමට උපකාරී වේ.
ඉතින්, MySQL භාවිතා කරන ඔබ, placeholder limitation එක මතක තබා, query strings සෘජුවම නිර්මාණය කරන විට පරීක්ෂා කරනවා අමතක නොකරන්න. එමෙන්ම, ඔබේ කේතයේ “prepared” පරිදි සැලසුම පවත්වාගෙන යාමට හැකි වෙනවා.
අවසන් වශයෙන්, මෙය MySQL, Next.js, හෝ driver එකේ බග් නොවෙයි; එය SQL dialect එකේ අන්තර්ගත සීමාවක්. එබැවින්, ඔබේ data layer එකේ සත්යය හඳුනා ගැනීම, production දෝෂ වලින් මිදීමට ප්රථම පියවරයි.