login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Warning: mysql_num_rows():

Offline lau - 12/09/2005 22:50
Avatar van lauHTML interesse Weer zo'n probleem, maar ik zie de fout niet:

foutmelding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in blabla.php on line 134

134:
  1. if(mysql_num_rows($sqlc) && mysql_num_rows($sqld) && mysql_num_rows($sqle) && mysql_num_rows($sqlf)) {

9 antwoorden

Gesponsorde links
Offline cracker - 12/09/2005 22:54 (laatste wijziging 12/09/2005 22:59)
Avatar van cracker Onbekend wtf is dat voor opdracht?
http://be.php.n...m-rows.php

mysql_num_rows() telt de rijen die uit een query komen, die kan je niet zomaar in een if...else constructor zetten ! 
Offline marten - 12/09/2005 22:55
Avatar van marten Beheerder lol wat wil je hiermee bereiken? 
Offline lau - 12/09/2005 23:37
Avatar van lau HTML interesse Als er een rij is ingevoerd moet hij de if uitvoeren, hierbij moet gelden dat er rijen zijn ingevoerd bij query sqlc/d/e/f...
Offline Gerard - 12/09/2005 23:56 (laatste wijziging 12/09/2005 23:56)
Avatar van Gerard Ouwe rakker
Citaat:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in blabla.php on line 134


Houdt vaak in dat je de verkeerde variabelen aanroept (query vars) of dat de query mislukt is.

De rest kan je zelf wel uitvogelen. 1 tip: mysql_error()
Offline Thomas - 13/09/2005 00:09 (laatste wijziging 13/09/2005 00:09)
Avatar van Thomas Moderator
Citaat:
mysql_num_rows() telt de rijen die uit een query komen, die kan je niet zomaar in een if...else constructor zetten !
Mja, dat kan dus prima... 0 is gelijk aan false, de rest is gelijk aan true - dus dat is logisch gezien prima toegestaan, het zal geen fouten opleveren (tenzij je de functie onder verkeerde omstandigheden gebruikt, waar hier waarschijnlijk sprake van is). Dus roep niet zomaar dingen als je enkel de melk hebt horen klotsen aub.

Citaat:
Als er een rij is ingevoerd moet hij de if uitvoeren, hierbij moet gelden dat er rijen zijn ingevoerd bij query sqlc/d/e/f...

Een INSERT-query geeft alleen maar een boolean terug die aangeeft of de query geslaagd is of niet... en het aantal query-resultaten van "true" of "false" tellen gaat nogal lastig lijkt mij. Je kunt bij mijn weten mysql_num_rows() gebruiken op het resultaat van een SELECT-query.

Dit staat ook zo op PHP.net:
Citaat:
Retrieves the number of rows from a result set. This command is only valid for SELECT statements. To retrieve the number of rows affected by a INSERT, UPDATE, or DELETE query, use mysql_affected_rows().


Wederom een typisch geval van (een gebrek aan) RTFM.
Offline lau - 13/09/2005 00:28
Avatar van lau HTML interesse Is verholpen, was die andere 4 queries vergeten uit de if te zetten die daarvoor worden tegengehouden.. haha..
Offline Thomas - 13/09/2005 07:48
Avatar van Thomas Moderator Ik snap van die laatste zin niets. Je kunt je probleem oplossen door alle voorkomens van mysql_num_rows uit je if-statement te halen, dus:

  1. if($sqlc && $sqld && $sqle && $sqlf) {

Er vanuitgaande dat $sqlc, $sqld, ..., $sqlf query-"resultaten" van INSERT-queries bevatten...
Offline lau - 13/09/2005 14:17 (laatste wijziging 13/09/2005 14:18)
Avatar van lau HTML interesse Nee nee.. ik heb iets anders.. ik heb ruim 90% informatie weggelaten.. maar hierdoor laait nu deze discussie.. hieronder een stukje van mijn code die eerst deze warning gaf:

  1. <?php
  2. $per1 = mysql_fetch_object(mysql_query("SELECT activeren FROM " . TBL_CCONTROL . " WHERE periode = 1"));
  3. if($per1->activeren) {
  4. $sqlc = mysql_query("SELECT ROUND(SUM(cijfer * weging) / SUM(weging),1) AS gem1 FROM " . TBL_CIJFERS . " WHERE ll = '".$sqla['id']."' AND rapport = '1' GROUP BY ll AND rapport = '1'");
  5. if(mysql_num_rows($sqlc)) {
  6. $resc = mysql_fetch_object($sqlc);
  7. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het gemiddelde cijfer voor periode 1 is: </td>';
  8. echo '<td width="15%"><strong>' . $resc->gem1 . '</strong></td>';
  9. echo '<td width="35%">1x</td></tr></table></div>';
  10. }
  11. }
  12.  
  13. $per2 = mysql_fetch_object(mysql_query("SELECT activeren FROM " . TBL_CCONTROL . " WHERE periode = 2"));
  14. if($per2->activeren) {
  15. $sqld = mysql_query("SELECT ROUND(SUM(cijfer * weging) / SUM(weging),1) AS gem2 FROM " . TBL_CIJFERS . " WHERE ll = '".$sqla['id']."' AND rapport = '2' GROUP BY ll AND rapport = '2'");
  16. if(mysql_num_rows($sqld)) {
  17. $resd = mysql_fetch_object($sqld);
  18. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het gemiddelde cijfer voor periode 2 is: </td>';
  19. echo '<td width="15%"><strong>' . $resd->gem2 . '</strong></td>';
  20. echo '<td width="35%">1x</td></tr></table></div>';
  21. }
  22. }
  23.  
  24. $per3 = mysql_fetch_object(mysql_query("SELECT activeren FROM " . TBL_CCONTROL . " WHERE periode = 3"));
  25. if($per3->activeren) {
  26. $sqle = mysql_query("SELECT ROUND(SUM(cijfer * weging) / SUM(weging),1) AS gem3 FROM " . TBL_CIJFERS . " WHERE ll = '".$sqla['id']."' AND rapport = '3' GROUP BY ll AND rapport = '3'");
  27. if(mysql_num_rows($sqle)) {
  28. $rese = mysql_fetch_object($sqle);
  29. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het gemiddelde cijfer voor periode 3 is: </td>';
  30. echo '<td width="15%"><strong>' . $rese->gem3 . '</strong></td>';
  31. echo '<td width="35%">1x</td></tr></table></div>';
  32. }
  33. }
  34.  
  35. $per4 = mysql_fetch_object(mysql_query("SELECT activeren FROM " . TBL_CCONTROL . " WHERE periode = 4"));
  36. if($per4->activeren) {
  37. $sqlf = mysql_query("SELECT ROUND(SUM(cijfer * weging) / SUM(weging),1) AS gem4 FROM " . TBL_CIJFERS . " WHERE ll = '".$sqla['id']."' AND rapport = '4' GROUP BY ll AND rapport = '4'");
  38. if(mysql_num_rows($sqlf)) {
  39. $resf = mysql_fetch_object($sqlf);
  40. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het gemiddelde cijfer voor periode 4 is: </td>';
  41. echo '<td width="15%"><strong>' . $resf->gem4 . '</strong></td>';
  42. echo '<td width="35%">2x</td></tr></table></div>';
  43. }
  44. }
  45.  
  46. $eind = mysql_fetch_object(mysql_query("SELECT activeren FROM " . TBL_CCONTROL . " WHERE periode = 5"));
  47. if($eind->activeren) {
  48. if(mysql_num_rows($sqlc) && mysql_num_rows($sqld) && mysql_num_rows($sqle) && mysql_num_rows($sqlf)) {
  49. echo '<hr class="line" />';
  50. $eindcijfer = (($resc->gem1 + $resd->gem2 + $rese->gem3 + $resf->gem4 + $resf->gem4) / 5);
  51. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het eindcijfer is: </td>';
  52. echo '<td width="50%"><strong>' . $eindcijfer . '</strong></td></tr></table></div>';
  53. echo '<div id="text"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%">Het afgeronde eindcijfer is: </td>';
  54. echo '<td width="50%"><strong>' . round($eindcijfer, 0) . '</strong></td></tr></table></div>';
  55. }
  56. }
  57. ?>


Onderin staat die in-het-verleden-gemaakte foutmelding:
  1. if(mysql_num_rows($sqlc) && mysql_num_rows($sqld) && mysql_num_rows($sqle) && mysql_num_rows($sqlf)) {


Maar de foutmelding kwam omdat:
  1. $sqlc = mysql_query("SELECT ROUND(SUM(cijfer * weging) / SUM(weging),1) AS gem1 FROM " . TBL_CIJFERS . " WHERE ll = '".$sqla['id']."' AND rapport = '1' GROUP BY ll AND rapport = '1'");
+ idem voor $sqld/e en f
... kwam omdat deze nog in de if(); stond van:
  1. if($per1->activeren) {
+ idem voor per2/3/4
Deze kan je met checkboxjes aan en uitvinken. Als alle 4 uitgevinkt staat is het dus 0 en wordt de if niet meer gelezen en kan hij die querie ook niet meer zin, vandaar die foutmelding.

Kan zijn dat ik het vaag uitleg, maar denk dat het te begrijpen valt. En waarschijnlijk is mijn code ook niet zo netjes geprogrammeerd 
Offline Dani - 14/09/2005 00:09 (laatste wijziging 14/09/2005 00:10)
Avatar van Dani PHP gevorderde Goed, maar toch zou je best de raad van fangorn volgen en die mysql_num_rows weghalen.

Zoals fangorn al zei, wordt je regel 48 dan :

if($sqlc && $sqld && $sqle && $sqlf) {

Ziet er toch veel mooier uit 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.238s