query naar array (simpel)
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
12 reacties op 'query naar array (simpel)'
Gesponsorde koppelingen
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...
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...
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)
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)
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.
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.
- 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:
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?
- 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}
}
?>
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?
@ 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.
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.
http://www.phphulp.nl/php/scripts/11/1458/
mijne doet ongeveer hetzelfde, heeft alleen iets meer opties en werkt met unbuffered query.
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.
- Details
Door:
Eddy Erkelens- 4 jaar geleden
- 1.010 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- PHP algemeen
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu