webForumDet fria alternativet

Skicka mysql resource till funktion

2 svar · 195 visningar · startad av Tinwëlint

TinwëlintMedlem sedan maj 2004451 inlägg
#1

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.

jepsOMedlem sedan mars 2001484 inlägg
#2

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);
TinwëlintMedlem sedan maj 2004451 inlägg
#3

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 :r

126 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)