Försöker göra en funktion som ska skriva ut länkar utifrån olika mysql-querys. Den ser ut så här:
function createlinks($res) { //$res är en mysql_query
var_dump($res);
if ($res = false) {
echo "Det finns inga tävlingar på den tid eller plats som angivits.";
}
else {
echo "<ul>\n";
while ($result = mysql_fetch_array($res)) {
echo ("<li><a href=\"/tresultat.php?id={$result['id']}\">{$result['header']} ({$result['date']})</a></li>\n");
}
echo "</ul>\n";
}
}
och anropas såhär:
$results = mysql_query("SELECT * FROM results ORDER BY date LIMIT 10", DB);
var_dump($results);
createlinks($results);
Problemet är detta:
Servern skrev:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /customers/degerfors-afk.net/degerfors-afk.net/httpd.www/tresultat.php on line 14
(rad 14 är inuti funktionen createlinks)
Använde var_dump och kollade så att variabeln var densamma både innan och när den hade skickats till funktionen. Båda gångerna:
var_dump skrev:
resource(3) of type (mysql result)
Är det inte tillåtet att skicka mysql_queries på det här sättet eller vad är det frågan om??
r:
Kan tillägga att det fungerade utmärkt när jag kopierade while-satsen från funktionen och lade den där funktionen kallades annars, så det är inget fel på queryn.
Jag föreslår att du bara skickar själva textsträngen och gör din mysql_query i createlinks-funktionen, dvs
function createlinks($sql) {
$res = myqsl_query($sql); // or die ...
if (mysql_num_rows($res) == 0) {
echo "Det finns inga tävlingar på den tid eller plats som angivits.";
}
else {
echo "<ul>\n";
while ($result = mysql_fetch_array($res)) {
echo ("<li><a href=\"/tresultat.php?id={$result['id']}\">{$result['header']} ({$result['date']})</a></li>\n");
}
echo "</ul>\n";
}
}
$sql = "SELECT * FROM results ORDER BY date LIMIT 10";
createlinks($sql);
Ja nu funkar det. När jag först prövade att bara skicka sql-strängen istället för queryn blev det ingen skillnad. När jag däremot ändrade min if-sats till ditt exempel:
if (mysql_num_rows($res) == 0) {
fungerade det.
Och det är inte konstigt med tanke på att jag hade skrivit:
if ($res = false)
och därmed tilldelat $res värdet false.
Jag glömmer alltid bort att det är skillnad på tilldelningen = och jämförelsen == i php.
Vad pinsamt
249 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91