mysql database zoeken naar \
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 \.
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
WHERE naam LIKE '%\\%'
werkt waarschijnlijk beter, je moet namelijk de speciale betekenis van de backslash zelf (\) escapen.
Gewijzigd op 12/09/2018 17:02:32 door Thomas van den Heuvel
SELECT * FROM `namen` WHERE naam LIKE '%\\%'; werkt helaas niet
LIKE '%\\\\%';
Halverwege deze pagina :
https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html
\\\\ in PHP
:p
Hangt er vanaf in welke context je werkt.
Pink A op 12/09/2018 17:09:59:
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.
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!
Toevoeging op 13/09/2018 13:57:27:
solved
Toevoeging op 13/09/2018 14:07:56:
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.
Alle oplossingen hierboven zijn symptoombestrijding van een achterliggend probleem dat elders opgelost moet worden.
Thomas van den Heuvel op 13/09/2018 16:01:19:
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.
Gewijzigd op 13/09/2018 16:20:51 door - Ariën -
mysql_real_escape_string() bestaat sinds PHP versie 4(.3.0) en add/stripslashes waren nooit bedoeld voor escaping.
Apostrofs in de database kan prima, mits je alle data maar op eenzelfde consequente manier blijft behandelen en overal op de juiste manier escapet.
Gewijzigd op 13/09/2018 20:26:57 door Thomas van den Heuvel
Thomas van den Heuvel op 13/09/2018 16:01:19:
Mja, of je checkt alle invoer voordat je het de database inkiepert.
Idealiter wel, maar als je kont onder de stront zit, zul je 'm toch een keer moeten afvegen.
(Wat een leuke zelfbedachte uitspraak ... die houd ik erin.)
EDIT: en/of inzetten op zindelijkheidstraining.
Gewijzigd op 14/09/2018 02:26:52 door Thomas van den Heuvel
Maar ja, als je nog een baby bent (in het programmeren) dan is dat misschien nog wat lastig ;-)
Anders gezegd, die rommel is ooit in de database terechtgekomen als gevolg van het handelen van iemand die op dat moment nog niet zo bekwaam was. Leren lopen gaat ook niet in 1 dag. En al er dus destijds rommel is gemaakt, zul je die een keer moeten opruimen ... en ervoor zorgen dat het niet meer kan gebeuren uiteraard ;)