Ok, ik ben hier nu twee dagen mee aan het klooien, heb allerlei string-manipulatie-functies gebruikt maar ik kom er echt niet uit. Hopelijk weet hier iemand meer.
Voor een intranet heb ik een database met een groot aantal homogene tabellen voor allerlei lijsten met artikelen (of posts). Je hebt dus artikelen_medewerkers, artikelen_klanten, artikelen_leveranciers etc.
Omdat al deze tabellen gelijk zijn afgezien van hun naam heb ik een aantal dynamische stored procedures gemaakt om er bewerkingen op uit te voeren. Bij het aanroepen van de sp kan ik dus de tabelnaam aangeven en de data die ingevoerd of gewijzigd moet worden. In zo'n stored procedure moet ik dan een SQL statement maken met de functie CONCAT() en dat vervolgens uitvoeren.
Maar voor bewerkingen met quotes in de tekst, en dat kan wel eens voorkomen in html, gaat het mis. Ik krijg dan zo'n statement:
Als f_bericht een tekstje bevat zonder quotes gaat dat prima. Zitten er wel quotes in dan krijg ik een syntax error bij het uitvoeren van de sp. Dus, ik denk, ik de quotes moeten ge-escaped worden met slashes. Dat doe ik in php via mysqli_escape_string, en ik heb het ook vanaf de prompt geprobeerd met een commando als:
Maar ook dan een syntax error. Doe ik nou een gewoon insert/update statement in de stored procedure, zonder CONCAT te gebruiken dan gaat het goed met gebruik van slash als escape characters. Maar dan moet ik voor elke tabel een aparte stored procedure aanmaken en ik was juist zo blij het dynamische uitgevogeld te hebben.
Na veel proberen ben ik er achter gekomen dat als ik een quote escape met drie andere het dan wel lukt. Dus dit werkt wel:
Maar in php of sql is er geen manier voor zover ik weet om een string op die manier te escapen, en het lijkt me ook een beetje overdone.
Weet iemand hoe ik de concat functie kan gebruiken met 'normale' escaped strings? Of een andere manier om dit op te lossen?
MySQL versie: 5.0.19 op Windows 2003 Server
Voor een intranet heb ik een database met een groot aantal homogene tabellen voor allerlei lijsten met artikelen (of posts). Je hebt dus artikelen_medewerkers, artikelen_klanten, artikelen_leveranciers etc.
Omdat al deze tabellen gelijk zijn afgezien van hun naam heb ik een aantal dynamische stored procedures gemaakt om er bewerkingen op uit te voeren. Bij het aanroepen van de sp kan ik dus de tabelnaam aangeven en de data die ingevoerd of gewijzigd moet worden. In zo'n stored procedure moet ik dan een SQL statement maken met de functie CONCAT() en dat vervolgens uitvoeren.
Maar voor bewerkingen met quotes in de tekst, en dat kan wel eens voorkomen in html, gaat het mis. Ik krijg dan zo'n statement:
code:
1
| SET @statement := CONCAT('UPDATE ',f_table,'_artikelen SET titel="',f_titel,'",inhoud="',f_inhoud,'" WHERE id = ',f_id,'');*/ |
Als f_bericht een tekstje bevat zonder quotes gaat dat prima. Zitten er wel quotes in dan krijg ik een syntax error bij het uitvoeren van de sp. Dus, ik denk, ik de quotes moeten ge-escaped worden met slashes. Dat doe ik in php via mysqli_escape_string, en ik heb het ook vanaf de prompt geprobeerd met een commando als:
code:
1
| call artikelen_update("<p align=\"right\">test</p>") |
Maar ook dan een syntax error. Doe ik nou een gewoon insert/update statement in de stored procedure, zonder CONCAT te gebruiken dan gaat het goed met gebruik van slash als escape characters. Maar dan moet ik voor elke tabel een aparte stored procedure aanmaken en ik was juist zo blij het dynamische uitgevogeld te hebben.
Na veel proberen ben ik er achter gekomen dat als ik een quote escape met drie andere het dan wel lukt. Dus dit werkt wel:
code:
1
| call artikelen_insert("<p align=""""right"""">test</p>") |
Maar in php of sql is er geen manier voor zover ik weet om een string op die manier te escapen, en het lijkt me ook een beetje overdone.
Weet iemand hoe ik de concat functie kan gebruiken met 'normale' escaped strings? Of een andere manier om dit op te lossen?
MySQL versie: 5.0.19 op Windows 2003 Server