PHP: 4.4.0
mySQL: 4.1.22
Ik heb een vreemd probleem wat in mijn ogen niet mogelijk zou moeten zijn.
Helaas is de praktijk anders.
Hier een versimpelde versie van de code die ik gebruik:
Doet niets meer dan controleren of de databaseverbinding nog bestaat en dan een mysql_db_query uitvoeren waar hij het resultaat van retourneert.
Ik heb al het idee om de mysql_db_query te vervangen door mysql_query omdat hij deprecated is geraakt.
Wat is nou je probleem?
Ten eerste: Het probleem doet zich zeer zelden voor er is geen pijl op te trekken wanneer het gebeurt en dus ook niet te reproduceren.
Het probleem is dat de queries uitgevoerd worden, er komt dus een result terug.
Dan wordt de while-lus van $res1 uitgevoerd. Deze doet drie iteraties en geeft dan uit het niets:
De resultset is dus op de één of andere manier maar deels goed.
Dit gebeurt echter heel sporadisch, als je het script nogmaals uitvoert gaat het wel goed en worden ook alle (ruim 1000) records geschreven in het bestand.
Het enige wat ik kon bedenken waar het aan kan liggen is dat de recordset in het geheugen van PHP op de één of andere manier corrupt raakt na het ophalen van de mySQL server. Of dat de fputs misschien iets raars doet waardoor de recordset beschadigd raakt.
Heeft iemand een idee waar ik moet zoeken? Ik heb me rotgezocht naar bugs in PHP of mySQL maar alles wat ik vind gaat over andere problemen helaas.
mySQL: 4.1.22
Ik heb een vreemd probleem wat in mijn ogen niet mogelijk zou moeten zijn.
Helaas is de praktijk anders.
Hier een versimpelde versie van de code die ik gebruik:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| $sql1 = 'query'; $sql2 = 'query'; $res1=$object->query($sql1); if(!$res1) die; $res2=$object->query($sql2); if(!$res2) die; $fp = @fopen("file", "w"); if(!$fp) { $object->loggen("Fout"); return 0; } while($row=mysql_fetch_assoc($res1)) { fputs($fp, $row['veld']); } while($row=mysql_fetch_assoc($res2)) { fputs($fp, $row['veld']); } fclose($fp); |
code:
1
| $object->query() |
Doet niets meer dan controleren of de databaseverbinding nog bestaat en dan een mysql_db_query uitvoeren waar hij het resultaat van retourneert.
Ik heb al het idee om de mysql_db_query te vervangen door mysql_query omdat hij deprecated is geraakt.
Wat is nou je probleem?
Ten eerste: Het probleem doet zich zeer zelden voor er is geen pijl op te trekken wanneer het gebeurt en dus ook niet te reproduceren.
Het probleem is dat de queries uitgevoerd worden, er komt dus een result terug.
Dan wordt de while-lus van $res1 uitgevoerd. Deze doet drie iteraties en geeft dan uit het niets:
code:
1
| mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource |
De resultset is dus op de één of andere manier maar deels goed.
Dit gebeurt echter heel sporadisch, als je het script nogmaals uitvoert gaat het wel goed en worden ook alle (ruim 1000) records geschreven in het bestand.
Het enige wat ik kon bedenken waar het aan kan liggen is dat de recordset in het geheugen van PHP op de één of andere manier corrupt raakt na het ophalen van de mySQL server. Of dat de fputs misschien iets raars doet waardoor de recordset beschadigd raakt.
Heeft iemand een idee waar ik moet zoeken? Ik heb me rotgezocht naar bugs in PHP of mySQL maar alles wat ik vind gaat over andere problemen helaas.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8