query naar array (simpel)

Door Eddy E, 14 jaar geleden, 5.307x bekeken

Met onderstaande functie kan je makkelijk en snel je sql uitvoeren en gelijk als array gebruiken.
Je kan daarna weer een while-loop gebruiken, maar wellicht wil je dat niet.
Je kan uiteraard ook een count() op het resultaat van de functie gooien etc.

Gesponsorde koppelingen

PHP script bestanden

  1. query-naar-array-simpel

 

Er zijn 12 reacties op 'Query naar array simpel'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Han eev
Han eev
14 jaar geleden
 
0 +1 -0 -1
Geeft dit geen notice? Omdat $fetched niet bestaat voordat jij hem aanroept. Voor de rest wel een handige snippet. Ik zou hem alleen anders noemen, niet fetch want daarmee wordt 1 regel bedoeld niet alles. Dus maar er iets van FetchAll van.


14 jaar geleden
 
0 +1 -0 -1
Wat is het verschil met mysql_fetch_array()?
Jurgen assaasas
Jurgen assaasas
14 jaar geleden
 
0 +1 -0 -1
fetched bestaat wel, hij wordt aangemaakt en meteen gevuld met array resultaten. Zelf zou ik het niet gebruiken (ik gebruik PDO) maar voor sommige mensen kan het wel uitkomst bieden.
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
Wanneer leren mensen nou eens goed om te gaan met link resource van mysql ?
Deze is veelal optioneel bij de mysql functies.
Maar feitelijk is ie dat helemaal niet!
Als er geen of meerdere resources bestaan zijn de uitkomsten niet conform je database verbinding. Bij geen wordt er zelfs gewoon een nieuwe verbinding gemaakt.
Met alle ellende van dien, verkeerde encodings, login errors, etc...
Robert Deiman
Robert Deiman
14 jaar geleden
 
0 +1 -0 -1
@Jurgen
Het is een goede gewoonte om voordat je op zo'n manier een array gaat maken/ vullen de variabele wel te definiëren. Volgens mij is het zelfs zo dat je een notice krijgt omdat de variabele niet bestaat voordat je de inhoud aan de variabele mee probeert te geven.
Jelmer -
Jelmer -
14 jaar geleden
 
0 +1 -0 -1
Bevat de teruggegeven array nu niet altijd $aantal_resultaten + 1 element?

Namelijk een laatste element met de waarde 'false'? Volgens mij krijg je eerste de toekenning (mysql_fetch_assoc() die false toekent aan een nieuwe entry in $fetched) en dan pas de evaluatie (de toegekende waarde evalueert naar true of false? false -> stop while-lus)
Tristan nvt
Tristan nvt
14 jaar geleden
 
0 +1 -0 -1
Ik zie hier zowiezo het nut niet van in, als het ook met 2 regels kan (query en fetch_assoc) Om daar dan elke keer 10x zoveel regels voor te gebruiken....
Frank -
Frank -
14 jaar geleden
 
0 +1 -0 -1
Wanneer je PostgreSQL als database gebruikt, heb je standaard de beschikking over pg_fetch_all() die een resultset in 1x in een array zet. Dit soort functies hoef je dus niet meer zelf te gaan maken.

Tip: Gebruik pg_query_params() om op een veilige manier variabelen in een query te zetten. Scheelt weer werk met *_escape()-functies om quotes e.d. veilig in een query te krijgen.
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
- Vergeet niet om in je foutafhandeling ook de mysql_error() weer te geven. Nu moet je nog zelf gaan gokken wat er fout is aan die query.
- Ook ben ik niet helemaal weg van die while loop die je gebruikt. Zorgt de return er niet al voor dat de functie direct beëindigd wordt?

Als je hier een functie voor wilt schrijven, zou ik hem zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function fetchAll($sQuery, $rConn)
{

    $res = mysql_query($sQuery, $rConn);
    
    if(!$res)
    {

        trigger_error(mysql_error().' in query: '.$sQuery);
        return false;
    }

    else
    {
        $aData = array();
        while($row = mysql_fetch_assoc($res))
        {

            $aData[] = $row;
        }

        
        return $aData;
    }
}

?>

Hierbij is $rConn de link identifier waar Lode het ook al over had, het resultaat van je mysql_connect() dus.

Verder zou je de trigger_error() natuurlijk nog kunnen vervangen door het gooien van een Exception. Dat is nog even netter aangezien je vanuit een functie eigenlijk geen output wilt hebben, dus ook geen foutmeldingen.

ps. @Tristan: dit is voornamelijk handig als je dezelfde resultaten vaker wilt gebruiken. Of was jij in dat geval van plan om elke keer dezelfde query uit te voeren om de resultaten opnieuw op te halen?
Tristan nvt
Tristan nvt
14 jaar geleden
 
0 +1 -0 -1
@Blanche - je kunt fetchen naar een variabele, dan krijg je gewoon een array. Wat je met die array gaat doen, moet je zelf weten. Vaak zal deze gelust gaan worden, maar je hoeft een fetch niet perse in een while of foreach te gebruiken :)
Eddy E
Eddy E
14 jaar geleden
 
0 +1 -0 -1
@ han: inderdaad kan dat (met sommige instellingen) een notice geven.
Ik definieer dus nu eerst $fetched (zie gewijzigd script).

@ Matthijs: dit zorgt ervoor dat je direct een array krijgt. Dus de fetch_array is er al, maar dan wel assoc én het scheelt je weer een paar regels voor de mysql_query.

@ Lode: bij fouten zorg je er toch gewoon voor dat het wel gaat werken?
De meeste mensen gebruiken maar 1 database, dus een link-indentifier opgeven hoeft veelal niet. Maar goed, als jij vaak die link-identifier wil opgeven: prima.
Het is een snippet, geen complete class!

@ pgFrank: nog steeds gebruikt merendeel gewoon MyISAM en MySQL.
Dat andere (PDO etc) deze functie niet kunnen gebruiken: prima. Gebruik hem dan niet.

@ Tristan: en als je 40x een query hebt op een pagina? Tuurlijk kan het ook kort, maar dan zit je ook met foutmeldingen etc. En dan zijn het gelijk weer 20 regels.
En je SQL opgeven heeft ook ruimte nodig. Nu is het kort in je php-code. Alleen je functie (include via glob()) is wat langer, maar die zie jij toch niet als je aan het scripten ben.

@ Jelmer: daar heb je helemaal gelijk in. Ik zag het ook al een enkele keer (dat het opviel), maar nog niet naar gekeken.
Dat is nu veranderd.

@ Blanche: foutmelding mag zoals je zelf wilt. Je kan mysql_error gebruiken, maar ook een trigger_error of exception gooien etc. Net wat je wilt.
De return staat NA de while-loop (lege while-loop), dus zal het niet onderbreken. Immers: dan zal het resultaat ook anders zijn.
Over de foutmelding (geen output in functie) heb je gelijk, maar dat laat ik even open. Immers: dat kan toch nooit goed (of het ene systeem kent het niet, of de andere gebruiker is niet tevreden).
Dus dat staat vrij ;).

@ Tristen: exact, hoewel ik dat weer wel doe.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Toby hinloopen
toby hinloopen
14 jaar geleden
 
0 +1 -0 -1
http://www.phphulp.nl/php/scripts/11/1458/

mijne doet ongeveer hetzelfde, heeft alleen iets meer opties en werkt met unbuffered query.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. query-naar-array-simpel

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.