Door
Richard Pietersen
op 24-11-2018 09:28
gewijzigd op 24-11-2018 09:32
1.375 views
op mijn website maak ik gebruik van onderstaande code:
$connect = mysqli_connect(.....);
$sql = "SELECT * FROM nieuws WHERE CurDate() <= tot_datum ORDER BY publ_datum DESC";
$resultaat = mysqli_query($connect, $sql);
$aantalRecords = mysqli_num_rows($resultaat);
Als de server draait op PHP 7.2, is $aantalRecords 0, als de server draait op PHP 5.6 is $aantalRecords 2
ik heb het idee dat het te maken heeft met gebruik van CurDate(), maar kan hier niet echt iets over vinden.
Iemand die mij kan helpen??
Grote kans dat het maken van een verbinding of het uitvoeren van de query in het eerste geval niet is geslaagd, vooral als je resultaten verwacht. Je controleert ook nergens of beide goed gaan, dus voor nu is het gissen wat er misgaat.
Schakel je toevallig ook van database(-poort) wanneer je van PHP-versie schakelt?
Het zou ook nog kunnen (maar redelijk onwaarschijnlijk) dat in de MySQL-variant die in PHP 7.2 wordt gebruikt de resultsets ongebufferd zijn. Dit houdt in dat de "PHP kant" niet alle records van tevoren inleest in het geheugen, alle resultaten staan dan dus nog aan de "MySQL kant" om opgehaald te worden. In dat geval is het dus ook niet mogelijk om records te tellen, omdat je simpelweg niet weet hoeveel dit er zijn totdat je ze allemaal hebt opgehaald.
Misschien was (en is) deze ongebufferde variant (bij gebruikmaking van een specifieke MySQL-driver?) heel lang de default? Maar zoals je je kunt voorstellen zorgde (en zorgt) dat (nog steeds) voor veel verwarring als je niet bekend bent met het fenomeen "(on)gebufferde result sets". Je gaat er simpelweg vanuit dat PHP op een of andere manier alle resultaten al binnentrekt, of dat num_rows() nogmaals met de database communiceert om records te tellen ofzo. Maar dat is dus niet zo vanzelfsprekend.