WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP variabler, fråga... (https://www.wn.se/forum/showthread.php?t=1044923)

youheardit 2010-11-19 00:21

PHP variabler, fråga...
 
Hejsan WN!

har en snabb fråga som jag inte kunnat googla fram då den är allt för enkel...

När man jobbar med funktioner och klasser så använder man ju oftast variabler inne i dessa. Exempel:
PHP-kod:

function wn(){
$get_data mysql_query("SELECT somtething"); //en select fråga
$data mysql_fetch_assoc($get_data);
return 
$data['kolumn'];


Frågan jag ställer är om det går att använda $get_data variablen igen till en ny fråga utanför funktionen exempel:
PHP-kod:

echo wn();

$get_data mysql_query("SELECT something else"); //en select fråga efter en annan tabell etc...
$data mysql_fetch_assoc($get_data);
echo 
$data['kolumn']; 

Går detta utan att mysql klabbar på något sätt?
Dvs blir variablerna innuti en funktion ignorerade utanför funktionen?

och nej, jag har inte testat själv. Detta då det är så svårt ibland att tolka felen i mysql.

tacksam för svar!

qson 2010-11-19 00:28

Det skall inte vara några problem. De variabler du har i funktionen är inte tillgängliga utanför.
Dessutom bryr sig inte MySQL om vilka variabler du använder, eller om du använder samma variabel till flera sql-frågor.
Om du kör tre olika frågor genom mysql_query och lagrar i samma variabel är det den sista som kommer användas när du hämtar resultatet.

Du får garanterat inget fel från mysql. Däremot kan det komma något från php om du t.ex. kör en sqlfråga inuti din funktion och sedan försöker hämta resultatet utanför funktionen:
PHP-kod:

function wn(){
$get_data mysql_query("SELECT somtething"); //en select fråga
$data mysql_fetch_assoc($get_data);
return 
$data['kolumn'];
}  

echo 
wn();

$data mysql_fetch_assoc($get_data);
echo 
$data['kolumn']; 

Detta kommer ju inte funka eftersom $get_data inte finns definerad utanför funktionen, men det visste du väl redan :D

youheardit 2010-11-19 00:47

Citat:

Ursprungligen postat av qson (Inlägg 20378830)
Det skall inte vara några problem. De variabler du har i funktionen är inte tillgängliga utanför.
Dessutom bryr sig inte MySQL om vilka variabler du använder, eller om du använder samma variabel till flera sql-frågor.
Om du kör tre olika frågor genom mysql_query och lagrar i samma variabel är det den sista som kommer användas när du hämtar resultatet.

Du får garanterat inget fel från mysql. Däremot kan det komma något från php om du t.ex. kör en sqlfråga inuti din funktion och sedan försöker hämta resultatet utanför funktionen:
PHP-kod:

function wn(){
$get_data mysql_query("SELECT somtething"); //en select fråga
$data mysql_fetch_assoc($get_data);
return 
$data['kolumn'];
}  

echo 
wn();

$data mysql_fetch_assoc($get_data);
echo 
$data['kolumn']; 

Detta kommer ju inte funka eftersom $get_data inte finns definerad utanför funktionen, men det visste du väl redan :D

Tack så mycket för ett klockrent svar!

Men jag har tidigare fått problem med likanande:
PHP-kod:

$result mysql_query("SELECT something");
$line mysql_fetch_assoc($result);
echo 
$line['kolumn'];

$result mysql_query("SELECT something else");
$line mysql_fetch_assoc($result);
echo 
$line['kolumn']; 

I detta fallet har jag tidigare fått problem genom att den gamla fråga är den som kommer att skrivas ut i $line i andra frågan....

Norman 2010-11-19 00:59

Läs på om scope inom programmering så får du mer information om synlighet av variabler i bland annat funktioner och klasser.

hnn 2010-11-19 09:02

http://se2.php.net/manual/en/languag...bles.scope.php

Conny Westh 2010-11-19 19:41

Ett tips som är generellt och som jag rekommenderar i alla programspråk är att dela upp kod i mindre delar så de blir lätta och får en självklar betydelse, i så hög utsträckning som möjligt. Vad jag menar är att du skriver ungefär så här i ditt fall:

Kod:

<?php

function something()
{
    $result = mysql_query("SELECT something");
    $line = mysql_fetch_assoc($result);
    return $line['kolumn'];
}

function somethingElse()
{
    $result = mysql_query("SELECT something else");
    $line = mysql_fetch_assoc($result);
    return $line['kolumn']; 
}

function toString()
{
    echo something();
    echo somethingElse();
}

toString();

?>

Det blir även enklare att lägga ut koden i klasser om du följer denna princip.

youheardit 2010-11-20 12:48

Citat:

Ursprungligen postat av ConnyWesth (Inlägg 20378892)
Ett tips som är generellt och som jag rekommenderar i alla programspråk är att dela upp kod i mindre delar så de blir lätta och får en självklar betydelse, i så hög utsträckning som möjligt. Vad jag menar är att du skriver ungefär så här i ditt fall:

Kod:

<?php

function something()
{
    $result = mysql_query("SELECT something");
    $line = mysql_fetch_assoc($result);
    return $line['kolumn'];
}

function somethingElse()
{
    $result = mysql_query("SELECT something else");
    $line = mysql_fetch_assoc($result);
    return $line['kolumn']; 
}

function toString()
{
    echo something();
    echo somethingElse();
}

toString();

?>

Det blir även enklare att lägga ut koden i klasser om du följer denna princip.

tack för det där Conny! Jo, jag brukar bygga mycket med klasser när det gäller stora sidor.

Men så djupt som du visade är inget jag brukar göra, men det låter logiskt! tack!


Alla tider är GMT +2. Klockan är nu 23:21.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson