abonnement Unibet Coolblue Bitvavo
  woensdag 5 november 2008 @ 21:40:30 #126
107951 JortK
Immer kwaliteitsposts
pi_62983036
Vraagje, ik declareer een array in mijn class:

1
2
3
<?php
public $sub = array();
?>


Vervolgens heb ik een functie waarmee ik deze array wil vullen:

1
2
3
4
5
6
7
8
9
<?php
    
function GetSub()
    {
        
$matches = array();
        
preg_match_all('pregstring',$this->data,$this->sub);
    }
    
?>


Hier moeten twee matches uitkomen.

Wanneer ik nu de functie ga aanroepen en de array ga weergeven, krijg ik de volgende zooi terug:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

)


Terwijl wanneer ik het op een simpele manier test de array wel gevuld is, iemand een idee? :)
  woensdag 5 november 2008 @ 21:48:14 #127
75592 GlowMouse
l'état, c'est moi
pi_62983344
Waarom noem je $matches in je voorbeeld?

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class JortK {
    public 
$sub = array();
    function 
GetSub() {
        
preg_match_all('/s/''asdfasdfasdf'$this->sub);
    }

}
$j = new JortK();
$j->GetSub();
print_r($j->sub);
?>

1
2
3
4
5
6
7
8
9
10
Array
(
    [0] => Array
        (
            [0] => s
            [1] => s
            [2] => s
        )

)
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  woensdag 5 november 2008 @ 22:02:33 #128
107951 JortK
Immer kwaliteitsposts
pi_62983913
Thanks Glowmouse, maar het bleek in de access modifier van een andere variabel te zitten
  donderdag 6 november 2008 @ 15:18:32 #129
63192 ursel
"Het Is Hier Fantastisch!
pi_63001850
Kan je een "SELECT * " SQL uitvoeren waarbij je 1 kolom exclude uit de resultaten?
  donderdag 6 november 2008 @ 15:28:03 #130
107951 JortK
Immer kwaliteitsposts
pi_63002094
quote:
Op donderdag 6 november 2008 15:18 schreef ursel het volgende:
Kan je een "SELECT * " SQL uitvoeren waarbij je 1 kolom exclude uit de resultaten?
Waarom niet gewoon dan SELECT veld1, veld2, veld3 FROM table doen?
pi_63002173
Ik heb nog niet zo heel veel met SQL gewerkt ofzo, maar je kunt toch gewoon de gegevens uit die kolom dan niet gebruiken?

Maar de manier van JortK lijkt me idd beter, dat zal een (iets) minder zware query zijn.
  donderdag 6 november 2008 @ 15:31:51 #132
63192 ursel
"Het Is Hier Fantastisch!
pi_63002201
quote:
Op donderdag 6 november 2008 15:28 schreef JortK het volgende:

[..]

Waarom niet gewoon dan SELECT veld1, veld2, veld3 FROM table doen?
Ik ben momenteel bezig om van ons archive-proces deze ook te gebruiken om producten te kunnen klonen.
Bij het archiveren heb ik geen last van DUPLICATE KEYS omdat deze keys nog niet in de archive database zitten.

Tijdens het kloon process blijf ik dus in dezelfde database en moet eigenlijk alleen sommige ID's gebruik gaan maken van de auto-incremental.

Het product te klonen heeft informatie in +/- 10 tables, waarbij de main-table zelfs tot 35 kolommen bevat. Ik hoopte dus eigenlijk dat ik grote delen van het archive proces kon hergebruiken..
  donderdag 6 november 2008 @ 15:32:13 #133
12221 Tijn
Powered by MS Paint
pi_63002213
Het is sowieso netter om geen "SELECT *" te gebruiken.
  donderdag 6 november 2008 @ 15:33:07 #134
63192 ursel
"Het Is Hier Fantastisch!
pi_63002239
quote:
Op donderdag 6 november 2008 15:32 schreef Tijn het volgende:
Het is sowieso netter om geen "SELECT *" te gebruiken.
Afhankelijk van je doel.
Voor het archiveren gebruiken we nu dus de query

INSERT INTO targetDB.table SELECT * FROM sourceDB.table WHERE ID = X
  donderdag 6 november 2008 @ 16:11:26 #135
12880 CraZaay
prettig gestoord
pi_63003389
quote:
Op donderdag 6 november 2008 15:32 schreef Tijn het volgende:
Het is sowieso netter om geen "SELECT *" te gebruiken.
Want? Het is netter om 10 kolommen op te sommen wanneer je 10 kolommen hebt, i.p.v. *? Says who?
  donderdag 6 november 2008 @ 17:10:39 #136
187069 slacker_nl
Sicko pur sang
pi_63005160
quote:
Op donderdag 6 november 2008 16:11 schreef CraZaay het volgende:

[..]

Want? Het is netter om 10 kolommen op te sommen wanneer je 10 kolommen hebt, i.p.v. *? Says who?
Tis eerder dat je de order kan garanderen als je niet * gebruikt, maar elk veld apart definieert. Anders kan het zijn dat iemand een table wijzigt en de order daarmee wijzigt, je app breekt omdat ie X verwacht daar waar hij Y krijgt.

Tenminste, dat is het argument wat ik gelezen heb hierover. Zie bijvoorbeeld hier: http://dbaforums.org/oracle/index.php?showtopic=8443
In theory there is no difference between theory and practice. In practice there is.
  donderdag 6 november 2008 @ 19:03:47 #137
12880 CraZaay
prettig gestoord
pi_63007952
quote:
Op donderdag 6 november 2008 17:10 schreef slacker_nl het volgende:

Tis eerder dat je de order kan garanderen als je niet * gebruikt, maar elk veld apart definieert. Anders kan het zijn dat iemand een table wijzigt en de order daarmee wijzigt, je app breekt omdat ie X verwacht daar waar hij Y krijgt.
Ik ken het hele concept van "breekbare order" niet, leg uit? Daarnaast lijkt het me niet eenvoudig om met een select iets te wijzigen in een tabel
  donderdag 6 november 2008 @ 19:11:28 #138
75592 GlowMouse
l'état, c'est moi
pi_63008182
Het zal eerder over een INSERT gaan, waarbij je niet je veldnamen specificeert.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  donderdag 6 november 2008 @ 20:01:23 #139
187069 slacker_nl
Sicko pur sang
pi_63009750
quote:
Op donderdag 6 november 2008 19:03 schreef CraZaay het volgende:
Ik ken het hele concept van "breekbare order" niet, leg uit? Daarnaast lijkt het me niet eenvoudig om met een select iets te wijzigen in een tabel
De orde is de volgorde, bij * is de volgorde zoals de table is aangemaakt, als ik vervolgens twee alters op een table uitvoer waarbij de orde van de velden veranderd, bijv:

create table blaat ( id int, val varchar(10), val2 varchar(10));

De volgorde is id, val, val2. Als ik nou val2 naar val rename en val naar val2 dan wordt de volgorde:
id, val2, val

Logisch, maar als ik dan een applicatie heb die select * from blaat uitvoert en bij val altijd koe of paard terugkrijgt (om maar een willekeurig iets te zeggen), maar nu omdat het val2 is, wordt dit boer of boerin. M'n applicatie verwacht dit niet, dan breek ik de applicatie (en niet de database uiteraard!). Als je checks op de data uitvoert zullen die checks failen, omdat je impliciet uitgaat van een bepaalde volgorde. Als je dit expliciet aangeeft in je query heb je dit hele probleem niet.

Nu kan je natuurlijk ook de zooi dmv een hash terugkrijgen, waardoor het niet echt veel uitmaakt, maar dit is wel degelijk van belang bij een sequentiele array.

In het kort, als je SELECT * uitvoert, laat je de DB bepalen wat de volgorde is, als je de velden zelf definieert bepaal je het zelf en heb je in theorie minder wijzigingen in je code als je wijzigingen in je DB maakt.

Hoop dat dit e.e.a. duidelijker maakt. Je hoeft het er niet mee eens te zijn, ik ben er voor mezelf ook nog niet uit of SELECT * nou echt zo'n zonde is als men zegt.. Maar goed, als iemand wat wijzigt in de DB en je hebt het expliciet de volgorde aangegeven dan weet je zeker dat er niks fout gaat en anders moet je hopen dat men de volgorde niet heeft aangepast....
In theory there is no difference between theory and practice. In practice there is.
  donderdag 6 november 2008 @ 20:40:46 #140
159635 Spike1506
NullPointerException
pi_63011013
@slacker_nl:
Je hebt inderdaad een goed punt. Sowieso is het fijner om de output van de DB zelf in "controle" te hebben door zelf de volgorde aan te geven.
pi_63011412
Slacker_nl heeft een goed punt, hoewel dit ook weer een nadeel is.

Ik moet vaak (Excel) exports vanuit een tabel maken, waar in principe alle data in terecht komt. Bij wijzigingen in de tabel is het wel prettig om dan * te dumpen, in plaats van dat je alle wijzigingen in de db ook in je exportcode moet gaan doorvoeren
  donderdag 6 november 2008 @ 21:05:58 #142
148588 rulerofdeath
Ruler the Rotting-BrainEater
pi_63011835
hallo

ik probeer de inhoud van een bestand in mijn database te krijgen en gebruik hiervoor deze code:
1
2
3
4
5
6
7
8
9
10
$lines = gzfile('http://nl1.tribalwars.nl/map/village.txt.gz');
         if(!is_array($lines)) die("File kan niet worden geopend."); 
         foreach($lines as $line) {
            list($id, $name,$x, $y, $player, $points, $rank) = explode(',', $line);
            $name = urldecode($name);

            $name = addslashes($name);
            mysql_query("INSERT INTO village SET id='$id', name='$name', x='$x', y='$y', 
               player='$player', points='$points', rank='$rank'");
}


ik krijg telkens
quote:
File kan niet worden geopend.
wat doe ik verkeerd?
Learn as if you're going to live forever, Live as if you're going to die tomorrow
De BIE®TAFELop youtube en dumpert _O_ &gt;100k views *O*
I wanna die the same way I was born: Screaming and covered with blood
Arbeit macht frei. Ik heb nu 40 jaar vakantie *O*
pi_63012184
Wat geeft var_dump( $lines )?
  donderdag 6 november 2008 @ 21:20:23 #144
148588 rulerofdeath
Ruler the Rotting-BrainEater
pi_63012419
bool(false)
Learn as if you're going to live forever, Live as if you're going to die tomorrow
De BIE®TAFELop youtube en dumpert _O_ &gt;100k views *O*
I wanna die the same way I was born: Screaming and covered with blood
Arbeit macht frei. Ik heb nu 40 jaar vakantie *O*
pi_63012774
quote:
Op donderdag 6 november 2008 21:05 schreef rulerofdeath het volgende:
hallo

ik probeer de inhoud van een bestand in mijn database te krijgen en gebruik hiervoor deze code:
[ code verwijderd ]

ik krijg telkens
[..]

wat doe ik verkeerd?
Waarschijnlijk ondersteunt gzfile() het http://-protocol niet.
  donderdag 6 november 2008 @ 21:48:00 #146
148588 rulerofdeath
Ruler the Rotting-BrainEater
pi_63013536
ik krijg nu een andere melding, ik zit nu ook bij een andere provider:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1048576 bytes) in /var/www/vhosts/biertafel.eu/httpdocs/index.php on line 1

(lijnnummer aangepast aan codefragment)
Learn as if you're going to live forever, Live as if you're going to die tomorrow
De BIE®TAFELop youtube en dumpert _O_ &gt;100k views *O*
I wanna die the same way I was born: Screaming and covered with blood
Arbeit macht frei. Ik heb nu 40 jaar vakantie *O*
  donderdag 6 november 2008 @ 21:53:14 #147
12880 CraZaay
prettig gestoord
pi_63013748
quote:
Op donderdag 6 november 2008 20:01 schreef slacker_nl het volgende:

De volgorde is id, val, val2. Als ik nou val2 naar val rename en val naar val2 dan wordt de volgorde:
id, val2, val

Logisch, maar als ik dan een applicatie heb die select * from blaat uitvoert en bij val altijd koe of paard terugkrijgt (om maar een willekeurig iets te zeggen), maar nu omdat het val2 is, wordt dit boer of boerin. M'n applicatie verwacht dit niet, dan breek ik de applicatie (en niet de database uiteraard!). Als je checks op de data uitvoert zullen die checks failen, omdat je impliciet uitgaat van een bepaalde volgorde. Als je dit expliciet aangeeft in je query heb je dit hele probleem niet.
Als je expliciet aangeeft dat je "SELECT val FROM ..." wilt, en deze kolom bevat opeens de data die voorheen bekend was als val2, dan heb je toch alsnog hetzelfde probleem, of begrijp ik je verkeerd?
pi_63014748
quote:
Op donderdag 6 november 2008 21:48 schreef rulerofdeath het volgende:
ik krijg nu een andere melding, ik zit nu ook bij een andere provider:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1048576 bytes) in /var/www/vhosts/biertafel.eu/httpdocs/index.php on line 1

(lijnnummer aangepast aan codefragment)
De melding zegt het al, je systeem/profiel heeft te weinig geheugen voor deze opdracht. Of je moet meer geheugen aanvragen of je moet je script op een andere manier gaan realiseren (bv via commandline de zip file extracten en dan rustig aan inlezen)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  donderdag 6 november 2008 @ 22:55:11 #149
187069 slacker_nl
Sicko pur sang
pi_63016772
quote:
Op donderdag 6 november 2008 21:53 schreef CraZaay het volgende:

[..]

Als je expliciet aangeeft dat je "SELECT val FROM ..." wilt, en deze kolom bevat opeens de data die voorheen bekend was als val2, dan heb je toch alsnog hetzelfde probleem, of begrijp ik je verkeerd?
Je begrijpt me verkeerd, stel... iemand dumpt de database, maakt wijzigingen in de dump, dropped de originele table en creeert opnieuw de table, alleen zijn val en val2 van volgorde gewijzigd. Bij select * is de volgorde van val en val2 dus anders dan jij in eerste instantie verwacht.. Als je select val, val2 gebruikt veranderd er niks, en heb je dus ook geen problemen met deze wijziging..

Dit is de kern van het verhaal:

1) select veld, veld2, veld3: expliciet aangeven in welke volgorde (de keuze wordt gemaakt door jou).
2) select *: impliciet aangeven in welke volgorde (de keuze wordt gemaakt door de DB)

Welke je prefereert, of toepast, dat maakt mij weinig uit, maar je moet rekening houden dat je met select * onverwachte dingen kunt tegenkomen als men een wijziging uitvoert op de database. That is all.
In theory there is no difference between theory and practice. In practice there is.
  donderdag 6 november 2008 @ 23:27:46 #150
63192 ursel
"Het Is Hier Fantastisch!
pi_63018001
Ik begrijp dus eigenlijk dat het niet mogelijk is om een kolom te excluden??

@slacker, Maar als je nou een associative array fetched?? Dan maakt dit toch ook niet uit? Of zie ik iets over het hoofd?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')