Unbuffered query snippertje

Door Toby hinloopen, 13 jaar geleden, 2.107x bekeken

Handige functie die MySQL data direct in array kan gooien met enkele opties. Direct uit mn classes script geplakt. Deze functie maakt deel uit van mijn MySQL class en mysql_connect erboven geplakt.

LET OP: maakt gebruik van UNBUFFERED QUERY
bedoeld voor het ophalen van grote lijsten met data zoals lijsten met forum posts of topics.

Omdat

letterlijk van mijn reference: ( originele / uitgebreide OMSCHRIJVING )

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
large_query($query,$indexkey,$allowmultidimarray)
    functie om grote array's aan data binnen te halen met een unbuffered query.
    
    =============================
    ========input================
    =============================
    $query = de query uiteraard.
    $indexkey (optioneel) (DEFAULT: false) = de naam van de kolom in de query die gebruikt moet worden als de key in een array.
        Indien er maar 2 kolommen worden opgevraagt (zie voorbeeld 2) en 1 van deze 2 kolommen is de indexkey,
        dan zal er achter de indexkey de andere opgevraagte waarde staan.
    $allowmultidimarray (optioneel) (DEFAULT: false) = of het toegestaan is om meerdere array's met data onder dezelfde indexkey te gooien.
        Indien 'true', zal er standaard een array achter een indexkey staan met daarin de array's met data.
        Indien 'false', zal enkel de 1e array ingevult worden en alle array's erna genegeert.

    
    =============================
    ===========voorbeeld=========
    =============================
    tabel: leden
    
    id | naam | email
    =================
    1  | jan  | jan@php.com
    2  | klaas| jan@php.com
    3  | piet | piet@php.com
    
    <?php
    print_r( large_query( 'SELECT * FROM `leden`' , 'email' , false));
    ?>

    
    uitvoer:
    -----------------
    array(
        [jan@php.com] = array(
            [id] = 1
            [naam] = jan
            [email] = jan@php.com
        )
        [piet@php.com] = array(
            [id] = 3
            [naam] = piet
            [email] = piet@php.com
        )
    )
    -----------------
    uitleg:
    hier wordt gevraagt naar alle kolommen (3) met als indexkey 'email'.
    Omdat multidimarray's op FALSE staat, wordt alleen het 1e resultaat met als email 'jan@php.com' weergegeven.
    ===================================
    =====voorbeeld 2===================
    ===================================
    tabel: leden
    
    id | naam | email
    =================
    1  | jan  | jan@php.com
    2  | klaas| jan@php.com
    3  | piet | piet@php.com
    
    <?php
    print_r( large_query( 'SELECT `naam`,`email` FROM `leden`' , 'email' , false));
    ?>

    
    uitvoer:
    -----------------
    array(
        [jan@php.com] = jan
        [piet@php.com] =  piet
    )
    -----------------
    
    uitleg:
    Hier wordt gevraagt naar slechts 2 kolommen. 1e is 'naam', andere is 'email'. Tevens is indexkey 'naam'.
    Omdat indexkey 'naam' is en er dan slechts 1 kolom aan data overblijft, wordt automatisch de 2e kolom als string aan de indexkey gekoppeld.
    Er worden slechts 2 resultaten weergegeven, omdat er 2 rows met hetzelfde email zijn terwijl dat de indexkey is.
    Multi-dimensional array's is uitgeschakeld, dus alleen de 1e match met een identieke e-mail wordt weergegeven.
    
    ===================================
    =====voorbeeld 3===================
    ===================================
    tabel: leden
    
    id | naam | email
    =================
    1  | jan  | jan@php.com
    2  | klaas| jan@php.com
    3  | piet | piet@php.com
    
    <?php
    print_r( large_query( 'SELECT * FROM `leden`' , 'email' , true));
    ?>

    
    uitvoer:
    -----------------
    array(
        [jan@php.com] = array(
            [0] = array(
                    [id] = 1
                    [naam] = jan
                    [email] = jan@php.com
                )
            )
            [1] = array(
                    [id] = 2
                    [naam] = klaas
                    [email] = jan@php.com
                )
            )
        [piet@php.com] = array(
            [0] = array(
                    [id] = 3
                    [naam] = piet
                    [email] = piet@php.com
                )
            )
    )
    -----------------
    
    uitleg:
    Hier wordt gevraagt naar alle (3) kolommen met als indexkey 'email'. Tevens is het toegestaan om multi-dimensional array's aan te maken.
    Standaard wordt er nu dus achter de indexkey een array aangemaakt met daarin alle array's (of strings, indien er naar 2 slechts kolommen werd gevraagt...) met data die bij die indexkey horen.

Voorbeeld: http://zie toelichting

Gesponsorde koppelingen

PHP script bestanden

  1. unbuffered-query-snippertje

 

Er zijn 4 reacties op 'Unbuffered query snippertje'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Noppes
Noppes
13 jaar geleden
 
0 +1 -0 -1
De grootste fout welke je maakt is dat je een database connectie nooit maar dan ook nooit verstopt in een functie!

En kijk ook eens naar de array functies
en dan voornamenlijk: array_key_exists
en je kan ook de ordinaire manier gebruiken: isset()

Daarnaast zitten er meer nadelen aan dan voordelen

Backtics horen niet thuis in SQL dus weg ermee
SQL-Statements kan je beter qouten met "" ipv '', das nu eenmaal een uitzondering op de regel vanwege o.a. WHERE veld='waarde'

Eind conclusie: een zinlose snippet

Debug je code alvorens je het post!! je verkijgt namenlijk een paar mooie undefined variable om je oren.

Als het deel uit maakt van een class dan lijkt het mij beter dat je de gehele class vrijgeeft en niet maar 1 method post
PHP Newbie
PHP Newbie
13 jaar geleden
 
0 +1 -0 -1
Die eind-conclusie van je slaat natuurlijk nergens op, Noppes, en daarnaast moet iemand zelf weten welk (deel van een class) hij post.
Toby hinloopen
toby hinloopen
13 jaar geleden
 
0 +1 -0 -1
@ noppes

dat connecten heb ik erbij gezet erbij gezet voor de mensen die er niet zoveel van snappen. Jij weet dat het niet in de functie hoort. daarom staat er netjes boven die 2 lijnen 'indien nodig, connecten'.

Deze functie hoort in je mysql class.

Maar om nou mijn hele mysql class te posten lijkt me een beetje onnodig. :P

vervolgens heb je het over de "" ipv '': dat zijn VOORBEELDEN. ieder zijn smaak. Ik werk liever met '' dan met "". Als jij liever met "" werkt... tja... wat heeft dat eigenlijk met die functie te maken?

Over die debug: de functie wordt al tijdje gebruikt maar ik heb eigenlijk nooit errors gehad, maarja: ik krijg ook nooit 'undefined var's' errors (mss omdat ze uitstaan...? :P)

owja... welke variable is dan niet defined? --behalve natuurlijk $mysql_... die je nog zelf moet invullen of moet verwijderen.

en om em nou nutteloos te noemen... ik gebruik em vrij vaak
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Derk  Janssen
Derk Janssen
13 jaar geleden
 
0 +1 -0 -1
toby hinloopen ik vind het een mooie functie ik heb hem iets aangepast maar hij werkt goed hier.
Bedankt voor het vrij geven.

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

Inhoudsopgave

  1. unbuffered-query-snippertje

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.