Dotaz, který jste zobrazili v otázce, nepoužívá hodnoty zadané uživatelem, takže neexistuje případ SQL Injection, ale v obecném případě:-
Nejprve musíte ověřit vše uživatelský vstup (uživatelská jména, e-maily atd.) před jeho použitím v dotazu. Například:- Pokud jste v uživatelském jménu povolili pouze alfanumerické znaky, musíte před pokračováním ve vytváření databázového dotazu zkontrolovat, zda je vstup skutečně alfanumerický či nikoli, a také musíte zkontrolovat velikost všech vstupů.
Poté jsou podle mého názoru připravené příkazy nejlepší volbou pro zabránění vkládání SQL.
Problém s mysql_real_escape_string():-
Protože mysql_real_escape_string() uniká znakům podle výchozí znakové sady, je lepší než funkce addlashes() a správně dezinfikuje Injekce SQL vznikající v důsledku zneužití vícebajtových znakových sad , ale v jiném článku zde , je ukázán scénář řešení, který vysvětluje, že injekci lze stále provádět.
Řešení:-
Správným a lepším způsobem, jak zabránit vkládání SQL, je použít připravené příkazy. Jde o techniku, ve které jsou příkazy SQL předkompilovány před vložením uživatelského vstupu (parametrů) a jsou považovány za opakovaně použitelné šablony SQL. Takže odděluje vstup uživatele od skutečného kódu SQL a analyzátor SQL nikdy neanalyzuje vstup uživatele.
Kromě zabezpečení optimalizuje také rychlost SQL dotazu. Pomáhá v případech, kdy potřebujete spustit stejný dotaz vícekrát s různými uživatelskými vstupy.
Podrobnosti o implementaci naleznete v příručce PHP.