[PHP] Returnera en variabel från en funktion?

Permalänk
Medlem

[PHP] Returnera en variabel från en funktion?

För att få ut en variabel gör jag den global, så långt har jagkommit.
Men nu är det så att jag vill få ut en array som hämtar info från en MySQL-databas.

function fetchQuery($query) { mysql_connect('127.0.0.1', '$dbUser', '$dbPass') or die(mysql_error()); mysql_select_db($dbDb); $items_query = mysql_query($query); while($items = mysql_fetch_assoc($items_query)) { } global $items; }

Såhär ser min funktion ut, men nu är frågan hur jag får ut $items med alla databas-raderna i sig.

fetchQuery("SELECT topic,body,author FROM man_news"); är raden jag tänker köra nu närmast, så att ni får ett hum om vad jag får ut.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Först måste du skapa en array där varje rad har ett eget index och sedan returnera den arrayen.

function fetchQuery($query) { mysql_connect('127.0.0.1', '$dbUser', '$dbPass') or die(mysql_error()); mysql_select_db($dbDb); global $items; $items = array(); $items_query = mysql_query($query); while($item = mysql_fetch_assoc($items_query)) { $items[] = $item; } }

Du bör också göra om $items till global innan du ändrar den, jag har då ingen aning vad som händer om variabeln $items redan finns lokalt i en funktion och i den globala rymden. Någon kanske orkar kolla?

Permalänk
Medlem

Varför global? Varför inte vanlig return?

Visa signatur

10 RTFM
20 RTFAQ
30 STFW

Permalänk
Medlem

$items = array(); // While-loop här return $items;

Enklast möjliga lösning, eller?

Permalänk
Medlem

Typ

Visa signatur

10 RTFM
20 RTFAQ
30 STFW

Permalänk
Medlem

{ mysql_connect('127.0.0.1', '$dbUser', '$dbPass') or die("Error: " . mysql_error()); mysql_select_db($dbDb) or die("Error: " . mysql_error()); $items_query = mysql_query($query); $items = array(); while($item = mysql_fetch_assoc($items_query)) { $items[] = $item; } return $items; }

Det funkar inte. Får inget error eller någonting :/

News.php

$news = fetchQuery("SELECT topic,body,author FROM man_news"); print_r($news);

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Hedersmedlem

Kommer du åt $dbUser och $dbPass i funktionen då? Skulle inte tro det, såvidare du inte har skrivit en icke-komplett funktion här...

Sätt även en or exit(mysql_error()); efter mysql_queryn...

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Jo, de variablarna är satta i include.php där också funktionen står.
Ska köra med or die(mysql_error()) på queryn också, så får vi se.

Edit: Nej, inget ändrades. Den bara slutar ladda sidan när jag inkluderar news.php i index.php.
Såhär ser koden ut nu:
Include.php

$dbDb="xXxX_main"; $dbUser="xXxX_main"; $dbPass="xXxXxX"; function fetchQuery($query) { mysql_connect("127.0.0.1", $dbUser, $dbPass) or die("Error: " . mysql_error()); mysql_select_db($dbDb) or die("Error: " . mysql_error()); $items_query = mysql_query($query) or die("Error: " . mysql_error()); $items = array(); while($item = mysql_fetch_assoc($items_query)) { $items[] = $item; } return $items; }

News.php

include("../include.php"); $news = fetchQuery("SELECT topic,body,author FROM man_news"); print_r($news);

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Hedersmedlem

Det där hjälper inte, antingen får du göra såhär:

$dbDb="xXxX_main"; $dbUser="xXxX_main"; $dbPass="xXxXxX"; function fetchQuery($query, $dbDb, $dbUser, $dbPass) { mysql_connect("127.0.0.1", $dbUser, $dbPass) or die("Error: " . mysql_error()); mysql_select_db($dbDb) or die("Error: " . mysql_error()); $items_query = mysql_query($query) or die("Error: " . mysql_error()); $items = array(); while($item = mysql_fetch_assoc($items_query)) { $items[] = $item; } return $items; }

Eller såhär:

$dbDb="xXxX_main"; $dbUser="xXxX_main"; $dbPass="xXxXxX"; function fetchQuery($query) { $dbDb = $GLOBALS['dbDb']; $dbUser = $GLOBALS['dbUser']; $dbPass = $GLOBALS['dbPass']; mysql_connect("127.0.0.1", $dbUser, $dbPass) or die("Error: " . mysql_error()); mysql_select_db($dbDb) or die("Error: " . mysql_error()); $items_query = mysql_query($query) or die("Error: " . mysql_error()); $items = array(); while($item = mysql_fetch_assoc($items_query)) { $items[] = $item; } return $items; }

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Självklart !
Men andra exemplet måste ju göra globala INNAN funktionen va?

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Om du använder konstanter så får du två fördelar. De är alltid globala. De går inte att 'råka' ändra dem i efterhand.

Nackdel. De går inte att ändra i efterhand

Visa signatur

10 RTFM
20 RTFAQ
30 STFW

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Zapher
Självklart !
Men andra exemplet måste ju göra globala INNAN funktionen va?

Det räcker med att variablerna ligger utanför funktionen.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Ok, jag försökte med att skriva global framför dem (innan funktionen) men utan framsteg.

Edit: Jag trro det har något med att jag har news.php i /pages och include.php i / . /index.php anropar /pages/news.php som i sin tur anropar /include.php.

Edit2:
M0ReC: Inget av dina exempel funkade, det måste vara något annat.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'