[PHP]Krijg ".. is not a valid result resource" niet gefixt

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 09-08 08:29

THiCE

Say it with a flourish!

Topicstarter
Na talloze debug pogingen blijf ik de volgende melding krijgen:

"Warning: mysql_fetch_object(): 32 is not a valid MySQL result resource in /public_html/members_admin.php on line 58"

Rondom line 58 staat:

PHP:
1
2
3
4
5
6
7
8
9
$query = "SELECT ID_MEMBER, realName, gender, birthdate, location, signature, avatar 
FROM uiforum_members 
WHERE ID_MEMBER = '$uiid'
AND (ID_GROUP = 1 OR ID_GROUP = 16)";
$result = mysql_query($query) or die ("memberquery mislukt" . mysql_error());
        
    while($obj = mysql_fetch_object($result)) {
        // etc
    }


Als ik dan in phpMyAdmin de bovenstaande query uitvoer, waarbij ik voor '$uiid' een ID invoer, 1 bijvoorbeeld, dan gaat het goed, en krijg ik de gewenste resultaten.

Ik heb geprobeerd te kijken wat eruit kwam als ik trigger_error() toevoegde aan de code:

PHP:
1
2
3
4
5
6
$query = "SELECT ID_MEMBER, realName, gender, birthdate, location, signature, avatar 
FROM uiforum_members 
WHERE ID_MEMBER = '$uiid'
AND (ID_GROUP = 1 OR ID_GROUP = 16)";
$result = mysql_query($query) or die ("query mislukt");
trigger_error ( "MySQL Error!!<br><br>" . mysql_error () . "<br>in query:<br>$query" );


Hier kwam slechts dit uit:
Notice: MySQL Error!!


in query: (mn query)


Niets dus, hij geeft geen mysql_error (er wordt slechts tekst geëcho'd), dus er zit wat fout in het datatype ofzo gok ik... Maar wat? Kan het liggen aan de column types die er gebruikt worden? fetch ik de data op de verkeerde manier? Het ligt in ieder geval niet aan het verbinden met de database, omdat dat op alle andere pagina's goed gaat, en ik overal hetzelfde bestandje include.
Als ik op google zoek naar de melding, dan krijg ik alleen maar websites die dezelfde warning bevatten 8)7, dus daar heb ik niets aan. Ook op php.net en dev.mysql.com kon ik niet veel zinnigs vinden :/
Waar kan deze warning aan liggen, en belangrijker nog: hoe kan ik er vanaf komen?

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 20:31
code:
1
$result = mysql_query($query) or die ("MySQL Error!!<br><br>" . mysql_error () . "<br>in query:<br>$query);

zo dan?

Acties:
  • 0 Henk 'm!

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 09-08 08:29

THiCE

Say it with a flourish!

Topicstarter
Nee, dan ook niet, omdat ik al nergens op de pagina mn eigenlijke foutmelding ("query mislukt") te zien kreeg... dan dus ook niet dat stukje code wat jij postte :)

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 21:13

TheDane

1.618

En als je de query print voordat je 'm uitvoert. en dan wat er geprint is copy/paste, en dat geheel in phpmyadmin invoert ?

mogen er wel quotes om $uiid heen staan?
en moet dat niet $uid zijn ?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Debuggen. Voeg even op een paar punten echo "check!"; in bijvoorbeeld, dan weet je precies waar die vastloopt. Echo je variabelen even ook. Zulke dingen lossen t bij mij vrijwel altijd wel op.

Acties:
  • 0 Henk 'm!

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 09-08 08:29

THiCE

Say it with a flourish!

Topicstarter
Ik heb voor de regel "$result = mysql_query($query) or die();" even "echo $query;" gedaan, en deze query c/p in phpMyAdmin gedaan, uitgevoerd, en dit ging perfect. Er moeten juist quotes om $uiid heen staan, anders gaatie zoeken op de string $uiid in plaats van de variabele. En het moet wel $uiid zijn, en niet $uid, daar ben ik 100% zeker van :P

Kijk, het is niet zo dat het niet werkt (error), ik heb alleen een vervelende warning in beeld, waar ik graag vanaf zou willen, maar niet weet hoe... Ik weet bijvoorbeeld ook niet waar die 32 voor staat in '32 is not a valid mysql result resource'...

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


Acties:
  • 0 Henk 'm!

Verwijderd

en als je quotes om de 1 en de 16 zet dan?

to TheDane: om $uuid mag je de quotes laten staan...

[ Voor 40% gewijzigd door Verwijderd op 22-03-2005 23:22 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Kan je die variable even concentaten? Dus buiten de dubbele quotes halen.

Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Controleer direct na mysql_query($query) eens of $result een resource is ( met is_resource() ).

En heb je niet toevallig ergens een verdwaalde mysql_free_result() staan? (je weet maar nooit.. ;) )

De query is goed lijkt me, anders zou mysql_error() inderdaad wel iets opleveren.

Acties:
  • 0 Henk 'm!

Verwijderd

Maak je wel verbinding met de database? :X

mysql_db_connect() dus

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op woensdag 23 maart 2005 @ 01:10:
Maak je wel verbinding met de database? :X
mysql_db_connect() dus
Dan moet er toch gewoon een error komen dat er nog geen verbinding is?

Acties:
  • 0 Henk 'm!

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022

tombo_inc

uhuh

haal die $uiid eens buiten quotes ('".$uiid."') 'want php parsed geen variabelen binnen enkele quotes (weet niet of dit voor sql hetzelfde is). verder ziet het er allemaal goed uit.
en je moet zorgen dat er iets te fetchen valt want anders wil ie ook nog wel eens moeilijk gaan doen.

[ Voor 29% gewijzigd door tombo_inc op 23-03-2005 07:59 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


Acties:
  • 0 Henk 'm!

  • bat266
  • Registratie: Februari 2004
  • Laatst online: 24-08 06:41
for the record alleen niet numerieke waarden moeten in sql tussen quotes staan maar bij de combinatie php mysql heb ik nog nooit een foutmelding gehad. Maar zout t toch even testen dan

Better to remain silent and be thought a fool then to speak out and remove all doubt.


Acties:
  • 0 Henk 'm!

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 09-08 08:29

THiCE

Say it with a flourish!

Topicstarter
masq schreef op woensdag 23 maart 2005 @ 00:07:
Controleer direct na mysql_query($query) eens of $result een resource is ( met is_resource() ).

En heb je niet toevallig ergens een verdwaalde mysql_free_result() staan? (je weet maar nooit.. ;) )

De query is goed lijkt me, anders zou mysql_error() inderdaad wel iets opleveren.
Woei, hier had ik wat aan! Inderdaad, na de while {} stond een mysql_free_result($result), die heb ik weggehaald, en weg was de warning :) Hoe kan dat nou? Heb ik de werking van mysql_free_result dan verkeerd begrepen ofzo? In ieder geval hardstikke bedankt voor de tips allemaal :)

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je verwijderd het resultaat voor je het gaat gebruiken. Dan heb je de werking inderdaad niet echt begrepen 8)7 Mocht je echt denken dat je die functie nodig hebt dan is het verstandiger om deze na gebruik, dus na de while lus, te gebruiken. Verder lijkt het me handiger als je volgende keer wel het complete relevante deel post...

Acties:
  • 0 Henk 'm!

  • THiCE
  • Registratie: Oktober 2001
  • Laatst online: 09-08 08:29

THiCE

Say it with a flourish!

Topicstarter
mysql_free_result() stond ná de while lus, ik kon de resultaten ook gewoon gebruiken, ik kreeg alleen de waarschuwing dat een getal 'not a valid mysql result resource' was.
Ik dacht ook dat ik het relevante deel van de code gepost had, ik wist alleen niet dat mysql_free_result relevant was :P

I just can't believe all the things people say.
Why must I deal with this shit, every fuckin' day?


Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
De enige logische verklaring voor die error is dat die mysql_free_result() tóch binnen de while lus staat.

Maarja, dat is niet erg waarschijnlijk.. dat had je nu toch wel gespot in de code denk ik, óf PHP was erover gestruikeld, óf je had wel opgemerkt dat er iets teveel geloopt werd dan de bedoeling was.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
Op zich was met de code in de TS wel goed (maar denk ook even aan mysql_real_escape_string als die $uuid uit een request variabele komt) met 'die(mysql_error())' enzo.

Ik denk dat je de warning krijgt omdat PHP de result resource vrijgeeft wanneer je met mysql_fetch_object() alle rows hebt uitgelezen. Dat lijkt logisch omdat je dan immers alle regels hebt uitgelezen dus heb je 'm verder niet meer nodig. Het staat echter nergens gedocumenteerd en bovendien zou je in theorie met mysql_data_seek de row pointer opnieuw in kunnen stellen om regels nog eens uit te lezen.

Ik zou het dus op een rariteit van PHP gokken. Dat die mysql_free_result call in de lus staat lijkt me erg sterk, want de TS zegt dat alles goed werkt. Dat doet vermoeden dat de fout echt pas optreedt nadat alle resultaten goed verwerkt zijn.

[ Voor 14% gewijzigd door Soultaker op 23-03-2005 17:55 ]


Acties:
  • 0 Henk 'm!

  • masq
  • Registratie: September 2004
  • Laatst online: 18-04 00:18
Onderstaande code wordt bij mij zonder warnings uitgevoerd:

PHP:
1
2
3
4
5
6
$result = mysql_query($query);
while($obj = mysql_fetch_object($result))
{
    // do stuff
}
mysql_free_result($result);


Het lijkt misschien goed te werken, zolang de query maar 1 rij retourneert en mysql_free_result() pas aangeroepen wordt na het gebruik van $result. Dan is er niets aan de hand met de uitvoer en gaat het pas fout bij de tweede keer dat $obj = mysql_fetch_object($result) wordt uitgevoerd.
Pagina: 1