sql >> Databáze >  >> RDS >> Mysql

Když escapuji veškerý vstup, někdy to v řetězci ponechá lomítka (\) a vloží jej do databáze. Proč se to děje a jak to mohu vyřešit?

Máte pravdu.
Magické citáty nemají nic společného s věcmi sql a neměly by s nimi být spojeny.
Protože magické uvozovky jsou problém na celém webu a escapování sql je pouze problém související s SQL.

Potřebují tedy různé zacházení a nikdy by se neměly používat společně.

Musíte se bezpodmínečně zbavit kouzelných uvozovek, protože kazí nejen SQL věci, ale každou manipulaci s daty na vašem webu.

Bylo by tedy moudré vložit nějaké stripslashes do jakéhokoli bootstrap souboru, který se má spustit při každém volání skriptu. Kód, který můžete najít v mnoha implementacích takového kódu, stačí vyhledat funkci 'stripslashes_deep'.

Bylo by moudré, aby se tento kód vždy spouštěl (samozřejmě za podmínky kontroly get_magic_quotes_gpc()) navzdory skutečnému stavu magických uvozovek, jen kvůli kompatibilitě.

Existuje však další možnost, jak je vypnout:zkuste vytvořit soubor php.ini v kořenovém adresáři vaší aplikace.

Ve vašem kódu je však závažná chyba. Ve skutečnosti nic nechrání.
Unikáte z $memberid a $postid ale necitujte je! . Neexistuje tedy vůbec žádná ochrana. Už jen proto, že escapování funguje pouze při použití s ​​citací.

Prosím, pamatujte:

Escapování není synonymem pro zabezpečení!

Samotný útěk ničemu nepomůže. Je třeba dodržovat celou řadu pravidel.

Nedávno jsem napsal slušné vysvětlení, takže bych se neopakoval:Nahrazení funkcí mysql_* PDO a připravenými příkazy



  1. Převod období PHP na jednotlivá data MYSQL

  2. Opětovné podřízení havarovaného hlavního serveru MySQL v nastavení semisynchronní replikace

  3. MySQL dual master

  4. Rozdělte záznam vrácený funkcí do více sloupců