sql >> Databasteknik >  >> RDS >> Mysql

När jag undkommer all inmatning lämnar den ibland snedstreck (\) i strängen och infogar den i databasen. Varför händer det och hur kan jag lösa detta?

Du har rätt.
magiska citat har ingenting att göra med sql-grejer och bör inte vara kopplade till det.
Eftersom magiska citat är ett problem över hela webbplatsen och att sql-escape är bara sql-relaterat problem.

Så de behöver olika behandling och bör aldrig användas tillsammans.

Du måste bli av med magiska citat villkorslöst, eftersom det förstör inte bara SQL-grejer utan varje datamanipulation av din webbplats.

Så det skulle vara klokt att sätta några stripslashes-kod i vilken bootstrap-fil som helst som ska köras på varje anrop av skriptet. Koden du kan hitta i många implementeringar av en sådan kod, bara googla efter funktionen 'stripslashes_deep'.

Det skulle vara klokt att alltid köra den här koden (naturligtvis under villkorskontrollen get_magic_quotes_gpc()) trots det faktiska tillståndet för magiska citat, bara för kompatibilitetens skull.

Men det finns en annan möjlighet att stänga av dem:försök skapa en php.ini-fil i roten av din applikation.

Det finns dock ett allvarligt fel i din kod. Det skyddar faktiskt ingenting.
Du flyr $memberid och $postid men citera dem inte! . Det finns alltså inget skydd alls. Bara för att escape fungerar bara när det används med citat.

Kom ihåg:

Att fly är inte en synonym för säkerhet!

Att fly ensam kan inte hjälpa någonting. Det finns en hel uppsättning regler som ska följas.

Jag skrev en anständig förklaring nyligen, så jag skulle inte upprepa mig själv:Ersätter mysql_*-funktioner med PDO och förberedda uttalanden



  1. MySqlCommand().ExecuteReader().GetString() fungerar inte

  2. Kardinalitetsuppskattning:Kombinera densitetsstatistik

  3. Vilket är snabbast COALESCE ELLER ISNULL?

  4. Ska jag placera EAV-värden i en datatyptabell?