Nu ben ik al een tijdje het volgende aan het proberen met een script:
$kasquery = "and `date` like <= '".$_POST['jaar']."".$maand3."%'";
$query = "SELECT type, SUM(bedrag) FROM factuur_betalingen WHERE `afbij` = 'BIJ' AND (`type` = 'OVERSCHRIJVING' OR `type` = 'IDEAL' OR `type` = 'PIN') ".$kasquery." GROUP BY type";
$result = mysqli_query($link,$query) or die(mysqli_error());
Nu wil ik dus dat hij zoekt onder bijvoorbeeld 202203% of gelijk aan 202203%
Zoals ik hem nu ingevoerd heb werkt het niet, als ik het zo doe:
$kasquery = "and `date` <= '".$_POST['jaar']."".$maand3."%'";
$query = "SELECT type, SUM(bedrag) FROM factuur_betalingen WHERE `afbij` = 'BIJ' AND (`type` = 'OVERSCHRIJVING' OR `type` = 'IDEAL' OR `type` = 'PIN') ".$kasquery." GROUP BY type";
$result = mysqli_query($link,$query) or die(mysqli_error());
Neemt hij het niet tot de laatste mogelijkheid mee.
Heeft iemand een idee hoe ik dit werkend zal krijgen?
Ik ben er inmiddels achter wat ik moest aanpassen om 202203% mee te pakken.
Ik heb het volgende gedaan:
AND (`date` <= '202203%' OR `date` LIKE '202203%')
nu geeft hij wel het resultaat wat ik vroeg.
Nu weet ik alleen niet of die % bij <= iets uithaalt of dat ik die maar gewoon weg moet halen.
Nu zal ik dus wel moeten werken aan het schoonmaken van de code zoals Frank zei met zijn "function", scheelt tenslotte ook een stuk code en dus minder belasting voor de webserver.
De VARCHAR ga ik niet meer aanpassen omdat ik dan alle codes door de website om moet bouwen aangezien het weer net anders werkt.
En betreft bescherming tegen SQL injecties, is mysql_real_escape_string() een oplossing om toe te passen? Zo ja: als ik die toepas moet ik die in de query zetten op deze manier?
WHERE `date` LIKE '".mysql_real_escape_string($value)."'
Ik zou ZEKER NIET de oude mysql_xxxx() functies gebruiken.
Zie ook:
[php]mysqli_real_escape_string[/php]
(Ikzelf ben fan van de object-oriented versie van Mysqli.)
Daar was ik van op de hoogte ;-) aangezien ik al met mysqli werk maar had dit van internet af geplukt.
Daarnaast waarschuwt Apache al zodra ik dus mysql_query's uitvoer dat deze uit gefaseerd zullen worden.
Dus op welke manier kan ik hem dan het beste uitvoeren?
Even het "schaapvoorbeeld" erbij gehaald.
[quote="Christian Snijders op 05/03/2022 13:34:26"]
Ik heb het volgende gedaan:
AND (`date` <= '202203%' OR `date` LIKE '202203%')
nu geeft hij wel het resultaat wat ik vroeg.
Je zal exact dezelfde resultaten hebben gekregen met
AND `date` LIKE '202203%'
Maar op jouw manier werkt het ook, en ik zou die ingewikkelde handleiding op de site van MySQL gewoon laten zitten.
[/quote]
Ik moest beide toevoegen omdat alles voor 202203 en de huidige maand meegepakt moesten worden, doe ik alleen like '202203%' krijg ik alleen alles van deze maand.
Het was ook inderdaad de bedoeling alles voor april op te roepen en dat samen op te tellen, wat je zegt klinkt nu ook best logisch dat hij mijn query aanzag als "202203" en niet alles wat in 202203XX komt dus is eigenlijk alles lager laten zoeken dan 202204 logischer.
De hele bedoeling van mijn query is dus onbeperkt terug de tijd in gaan tot op het moment dat ik dat van hem vraag (in dit geval eind maart) er is dus geen begin of specifieke dag vereist.