webForumDet fria alternativet
Logga in / Bli medlem

PHP funktion för att hämta SQL-data

PHP

6 svar · 496 visningar · startad av nighteye

Medlem sedan sep. 200260 inlägg
Trådstart#1

Håller på att trixa ihop en funktion som jag kan använda när som helst när jag väl köra en query mot SQL-databasen utan att behöva skriva en massa tabellnamn och databasuppgifter. Problemet är att jag inte får någon data returnerad, fattar inte heller varför. Nån som ser nåt fel?

Ligger en require längst upp som hämtar inloggningsuppgifter, databas och tabell från MySQL databasen.

Så här ser funktionen ut som jag kör queryn emot.

function fn_dbquery($query)
        {
        $dbresult = mysql_query($query) or die(mysql_error());
        if (!$dbresult)
                {
                $message  = 'Invalid query: ' . mysql_error() . "\n";
                $message .= 'Whole query: ' . $query;
                die($message);
                }
        else
                {
                return mysql_fetch_array($dbresult);
                }
        mysql_free_result($dbresult);
        }

Och så kör vi queryn här för att hämta resultatet:

$query = "SELECT * FROM categories WHERE apa LIKE '%.0'";
fn_dbquery($query);
while ($row = @mysql_fetch_array($dbresult))
        {
        echo "<option>$row[category_name]</option>\n";
        }

Men jag får ingen data, blir bara tomt. Varför?

Medlem sedan juni 200032 967 inlägg
#2

Du måste väl ta emot det du returnerar från funktionen också?

$mysqlresult = fn_dbquery($query);

Sedan loopar du igenom $mysqlresult.

Medlem sedan sep. 200260 inlägg
#3

Det fungerar nu, tack för tipset!

Var även tvungen att ändra så att jag bara returnerar variablen och inte hela arrayn i funktionen.

return $dbresult;
Medlem sedan juni 20014 290 inlägg
#4

Tänk på att mysql_free_result() aldrig kommer att köras eftersom if satsen antingen kör en die() eller en return().

Medlem sedan sep. 200260 inlägg
#5

Hur ska jag göra för att den ska rensa resultatet då i funktionen direkt?

Medlem sedan juni 20014 290 inlägg
#6

mysql_free_result() tar bort resultatet av din fråga vilket gör att du inte kommer åt resultatet längre.

Då kan du inte köra den i din funktion eftersom att du efter att du anropat funktionen använder resultatet av frågan, tar du då bort resultatet i frågan så får du inget resultat att använda.

Du måste göra något liknande:

$query = "SELECT * FROM categories WHERE apa LIKE '%.0'";
$dbresult=fn_dbquery($query);
while ($row = @mysql_fetch_array($dbresult))
        {
        echo "<option>$row[category_name]</option>\n";
        }
mysql_free_result($dbresult);
Medlem sedan sep. 200260 inlägg
#7

Ja precis som jag trodde. Ville haft det i funktionen så man slipper skriva det varje gång.

251 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)