webForumDet fria alternativet

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

6 svar · 494 visningar · startad av nighteye

nighteyeMedlem sedan sep. 200260 inlägg
#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?

@ndersMedlem sedan juni 200026 914 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.

nighteyeMedlem 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;
GunnarDMedlem sedan juni 20014 250 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().

nighteyeMedlem sedan sep. 200260 inlägg
#5

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

GunnarDMedlem sedan juni 20014 250 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);
nighteyeMedlem sedan sep. 200260 inlägg
#7

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

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb