In de database zijn namen gekomen met \ erbij, dus bijvoorbeeld "Erik\\\\".
Nu wil ik deze namen opzoeken en verwijderen, maar hoe zoek je op \ ?
Simpel SELECT * FROM `namen` WHERE naam LIKE '%\%' is werkt niet met het teken \.
Ik denk dat hier een aantal andere problemen spelen.
Waarom zou dit in eerste instantie een probleem vormen?
En dan is het de vraag waar je dit probleem oplost.
Als iemand zich registreert, zou je regels kunnen opstellen welke karakters iemand mag gebruiken voor zijn/haar (nick)naam in de vorm van een whitelist.
Vervolgens zou dit wellicht voor problemen kunnen vormen bij het uitvoeren van queries, maar als je alles op de juiste wijze escaped zou dit niet voor problemen hoeven te zorgen.
Dus ook al los je dit "probleem" (het aanwezig zijn van underscores backslashes in gebruikersnamen) op dan is waarschijnlijk het achterliggende probleem (potentieel onveilige queries) daarmee nog niet opgelost.
Ik weet het, nu is de code beter zodat het niet meer voorkomt, maar zit met oude database.
SELECT * FROM `namen` WHERE naam LIKE '%\\%'; werkt helaas niet
Ik weet het, nu is de code beter zodat het niet meer voorkomt, maar zit met oude database.
Ik zou dan de mogelijkheid om de database te benaderen korte tijd uitschakelen / website om onderhoudsredenen niet benaderbaar maken.
De database / tabel die het betreft exporteren. In veel programma's (Excel, Word, Notepad, ......) kun je vrij eenvoudig zoek / vervang toepassen.
Daarna gegevens inlezen.
Obelix en Idefix, dank je, dat is een heel goed idee! Zo kwam ik erachter dat het maar om 8 records ging van de 21.000. Super!
Ik heb deze pagina ook gelezen met bruikbare info https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html, maar helaas werkt het toch niet zo in mijn PhpMyAdmin.
Dank voor al jullie suggesties en meedenken!
[size=xsmall]Toevoeging op 13/09/2018 13:57:27:[/size]
solved
[size=xsmall]Toevoeging op 13/09/2018 14:07:56:[/size]
Misschien nog een goede toevoeging. Meestal komt de \ alleen in een database voor als er een ' is gebruikt. Dus zoeken op %'% helpt je om de \ te vinden.
Mja, of je checkt alle invoer voordat je het de database inkiepert.
Ja, maar je hebt vaak ook legacy-code, die misschien ervoor heeft gezorgd heeft dat elke apostrof met stripslashes in de database kwam.
Ik hoop dat diegene inmiddels weten dan dat dit al lang niet meer kan. Maar vroeger bestond er in MySQL nog geen escape-functie. Maar dan praat ik ook echt over bijna 15 jaar geleden. Maar met hele oude datasets, kan dit zeker gebeuren.
Dit kan je vaak moeilijk terugdraaien. Misschien bij een veld met namen of iets dergelijks,in ieder geval waar je normaal geen apostrof verwacht. In een veld waar HTML-code in staat, kan het filteren juist desastreus zijn.