[PHP/MYSQL]

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 26-06 12:24
Hallo,

Ik ben een bestaand script aan het aanpassen (blog script van supersimple.org). Nou ben ik na aardig wat uurtjes klooien eigenlijk vrijwel klaar en werkt alles naar behoren, maar krijg ik elke keer als ik een reactie plaats een error (op bv deze pagina: http://hkramer.nl/blogtest/index.php?entry=24 ). De error is als volgt:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/hkramer/public_html/blogtest/index.php on line 288

Ik heb er een mysql_error op los gelaten als volgt (de laatste regel is regel 288):

<? $result = mysql_query ($query);
echo 'result: '.$result.'<br /><br />';
if(false === $result){
echo 'Query is mislukt: '.mysql_error().'<br />'.PHP_EOL;
}
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { ?>

Het result is als volgt: "Resource id #5", en ik krijg geen mysql_error.

Ondanks die php error werkt eigenlijk alles perfect. Maar toch is zo'n error gewoon niet netjes. Ik heb er echt al een uur mee zitten te klooien, maar ik begrijp niet wat de fout is.. Heeft iemand enig idee wat de fout hier is?

Ik heb het volledige script even online gezet, mocht iemand het in willen kijken: http://hkramer.nl/blogtest/index.txt

Acties:
  • 0 Henk 'm!

  • frederikske
  • Registratie: Oktober 2002
  • Niet online
vraagje:
$perPage dat wordt gebruikt in:
code:
1
2
3
4
5
}else{

    $query = "SELECT comment, image, title, DATE_FORMAT(time, '%M %d, %Y %h:%i%p') AS time, uid, comments, postedBy, time AS ts FROM $TABLENAME ORDER BY ts DESC LIMIT $bPage,$perPage ";

}


waar krijgt dat zijn waarde?

Edit:
Mss niet zo orthodoxe methode, maar smijt hier en daar eens een print_r of var_dump van $result erin; aangezien $result geen geldig MySQL result lijkt te zijn...

[ Voor 23% gewijzigd door frederikske op 10-08-2009 17:29 ]


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
kramer65 schreef op maandag 10 augustus 2009 @ 17:19:
PHP:
1
2
3
4
5
6
<? $result = mysql_query ($query);
echo 'result: '.$result.'<br /><br />';
if(false === $result){
   echo 'Query is mislukt: '.mysql_error().'<br />'.PHP_EOL;
} 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { ?>
Na mysql_query is $result nooit ===false.
Je kunt beter if (!$result).. gebruiken.

Acties:
  • 0 Henk 'm!

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 26-06 12:24
@frederikske
$perPage krijgt zijn waarde in settings.php wat wordt ge-include().

Ik heb vlak voordat die error wordt gecreëerd ook een echo van $result gedaan en daar komt gewoon iets uit (Resource id #5). Ik begrijp dus uberhaupt niet waarom die daar een error geeft.. :?

@dik voor mekaar
Ik heb nu (!$result) gebruikt, maar dat veranderd vooralsnog niets aan het resultaat..


Iemand nog andere ideeen? Ik heb zitten kijken naar comments.php wat ik include maar de query die de error veroorzaakt komt ook gewoon uit het stukje erboven. Ik zit echt volledig vast hier.. 8)7

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 01:04
Ik weet niet meer precies hoe dat ging met PHP en regelnummers in foutmeldingen wanneer je bestanden includet, maar ik denk dat je toch (ondanks ontbreken van meer info in warning) in comments.php moet zijn.

Kun je dat anders ook als .txt of beter nog als .phps online zetten. Dat laatste geeft, mits server goed geconfigureerd is, ook highlighting. (Helaas wordt de leesbaarheid niet automatisch verder verbeterd door ook inspringing te fixen.)

@hieronder: dan liegt de TS :? of ik kijk ergens overheen (nettere opmaak van het script zou in elk geval fijn zijn).

[ Voor 11% gewijzigd door Raynman op 10-08-2009 19:34 ]


Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Op het moment dat je query fout gaat geeft mysql_query() false terug, en dat is geen resource, waarover mysql_fetch_array() weer struikelt. Je probleem is dus je query.

Doe anders vlak voor mysql_query($query); eventjes een var_dump($query); en gooi die output eens door phpMyAdmin. Dan zie je precies wat er precies mis gaat op MySQL-niveau.
Raynman schreef op maandag 10 augustus 2009 @ 18:56:
Ik weet niet meer precies hoe dat ging met PHP en regelnummers in foutmeldingen wanneer je bestanden includet, maar ik denk dat je toch (ondanks ontbreken van meer info in warning) in comments.php moet zijn.

Kun je dat anders ook als .txt of beter nog als .phps online zetten. Dat laatste geeft, mits server goed geconfigureerd is, ook highlighting. (Helaas wordt de leesbaarheid niet automatisch verder verbeterd door ook inspringing te fixen.)
PHP geeft nog net wel goed aan in welke file het fout gaat ;)

Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
kramer65 schreef op maandag 10 augustus 2009 @ 18:15:
@dik voor mekaar
Ik heb nu (!$result) gebruikt, maar dat veranderd vooralsnog niets aan het resultaat..
Druk anders sowieso de mysql_error() af.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als die debug code klopt is er maar 1 fout mogelijk: binnen de loop $result op iets anders zetten. Sowieso wel leuk om te testen bij welke iteratie het fout gaat.

{signature}


Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Kan je ook eens checken in de code waar de connect gedaan word? Ik kan die namelijk niet vinden. Kijk daar eens of er een select db gedaan wordt en welke dat is. En of dat de juiste db is natuurlijk.
En controleer eens wat er in de variabele $TABLENAME staat (of de db daarin staat).

Ik maak mijn query's altijd met
PHP:
1
$query = "SELECT ... FROM " . $database . "." . $table . " ... ;"
En rond dbnamen, tabelnamen en rijnamen zet ik altijd een ` om zeker geen last te hebben met gereserveerde woorden.

Acties:
  • 0 Henk 'm!

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 26-06 12:24
Ik moest helaas even weg maar ben nu (al is t erg laat) weer terug.

Ik heb jullie suggesties verwerkt. Ik heb een var_dump($query); gedaan en daarna echo ik $query. (weet niet wat het verschil is, maar krijg hetzelfde resultaat). Die query heb ik vervolgens in phpmysql laten lopen, en daar krijg ik geen error.
Ik echo ook sowieso de mysql_error(), maar krijg daar ook geen error van.

Ik heb ook comments.php online gezet hier: http://hkramer.nl/blogtest/comments.txt

Hij maakt dus echt geen error in die query, en ik begrijp danook niet waarom die dan een error maakt dat dat "supplied argument is not a valid MySQL result resource".
Heb ik niet een syntax fout ofzo? Alhoewel die dan ook wel een andere error zou geven toch..? Ik ben echt volledig in de war.. |:(

Nog iemand ideeën?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Indent eens fatsoenlijk en je zal zien dat ik de oplossing geef. :z

{signature}


Acties:
  • 0 Henk 'm!

  • kramer65
  • Registratie: Oktober 2003
  • Laatst online: 26-06 12:24
@voutloos
Ik neem aan dat je met indents de tabs bedoelt die je gebruikt na if-statements? Dat heb ik na de betreffende probleemregel volgens mij wat beter gedaan. Ik zou je eeuwig dankbaar zijn iig!

Ik heb zelf ook al wat meer zitten klooien. Ik merkte op dat de eerste dingen worden ge-echo't voordat het alle text wordt geprint. De error komt er pas na. Ik neem dus aan dat de while-loop een keer correct wordt doorlopen waarna pas de error komt. Dus heb ik geprobeerd een unset($row) te doen zodat de while() voorwaarde niet meer wordt voldaan en de loop dus zal eindigen. Dit geeft echter nog steeds dezelfde error.
[EDIT] ik zie ineens ook dat dat ervoor zorgt dat je bij het overzicht van alle verhalen (http://www.hkramer.nl/blogtest/) er nog maar eentje wordt weergegeven. Ik heb dat dus maar weer weggehaald.. {/EDIT]

Tja, zoals gezegd, als jij nog meer ideeën hebt? :*) _/-\o_


[EDIT 2]
Ik heb net de include(comments.php) weggehaald en foetsie was de error. De oorzaak zit dus inderdaad wel degelijk in comments.php.. Ik ga verder op zoek!
[/EDIT 2]


[EDIT 3]
JAAAAAAAAAAAAAAAA!!! Ik heb het gevonden! Het hep effe geduurt maar de oplossing was als volgt;
In het comments.php bestand stond ook een $result variabele. En aangezien dat bestand midden in de while-loop wordt aangeroepen wordt de variabele midden in die while-loop veranderd. Ik heb dus de $result variabele in het comments.php bestand van naam veranderd en zo de boel opgelost..

Heel erg bedank voor alle hulp iig! Dankzij jullie tips etc ben ik wel tot de conclusie gekomen!
[/EDIT 3]

[ Voor 41% gewijzigd door kramer65 op 11-08-2009 00:58 ]

Pagina: 1