abonnement Unibet Coolblue Bitvavo
pi_63705311
Weet iemand een opensource database class voor php? die niet al te veel troep bevat? GlowMouse melde mij dat het in mijn geval voor het optimaliseren van een database zeer handig is om te werken met database classes! zelf heb ik er ooit wel eens 1tje geschreven maar wil eens afkijken bij classes die erg goed zijn
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_63705365
Zend_Db
pi_63706443
ik gebruik adoDB, ben ik erg tevreden over
pi_63708853
quote:
Op dinsdag 2 december 2008 20:02 schreef Chandler het volgende:
GlowMouse melde mij dat het in mijn geval voor het optimaliseren van een database zeer handig is om te werken met database classes!
Wat voor optimalisatie voert zo'n class dan uit
pi_63709083
quote:
Op dinsdag 2 december 2008 21:40 schreef Roy_T het volgende:

[..]

Wat voor optimalisatie voert zo'n class dan uit
Caching?
  dinsdag 2 december 2008 @ 21:49:45 #156
12221 Tijn
Powered by MS Paint
pi_63709120
quote:
Op dinsdag 2 december 2008 21:40 schreef Roy_T het volgende:

[..]

Wat voor optimalisatie voert zo'n class dan uit
Een databaseklasse maakt het bijvoorbeeld makkelijk om dmv transacties een aantal queries te verzamelen en gezamelijk uit te voeren, waardoor je je database efficiënter kunt gebruiken. Dat is althans wat er in de documentatie van PDO staat:
quote:
Transactions are typically implemented by "saving-up" your batch of changes to be applied all at once; this has the nice side effect of drastically improving the efficiency of those updates. In other words, transactions can make your scripts faster and potentially more robust (you still need to use them correctly to reap that benefit).
pi_63709601
quote:
Op dinsdag 2 december 2008 21:48 schreef Geqxon het volgende:

Caching?
Dat kan ja. En transacties zou ook kunnen (indien i.c.m. MySQL: niet op MyISAM tabellen). Maar er is geen gouden regel die zegt dat database classes dat "dus" kunnen en voor enige optimalisatie zorgen. Dat was eigenlijk ook het punt van mijn retorische vraag: het is maar net wat je erin bakt.
pi_63709930
Het gaat niet om cachen maar vooral om queries in de gaten te kunnen houden op een overzichtelijke manier, met een database class is het simpeler om te kijken welke queries geoptimaliseerd dienen te worden op wat voro manier dan ook.

Tenminste dat wil ik er mee kunnen bereiken, evenals standaard error logging etc.
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 2 december 2008 @ 22:33:59 #159
75592 GlowMouse
l'état, c'est moi
pi_63710780
Ik doelde er inderdaad op dat je in één oogopslag moet kunnen zien welke queries er nodig zijn om een pagina op te bouwen, en hoeveel tijd elke afzonderlijke query kost. Dat geeft je een globaal overzicht, en dan zie je of je queries kunt combineren of weg kunt laten (zeker in wat grotere projecten waar steeds wat bijkomt wil dit nog wel eens het geval zijn). Daarnaast wil je ook de EXPLAIN-output kunnen zien van alle queries. Dat helpt enorm bij het verbeteren en in kaart brengen van indices en het verbeteren van joins.
Als je steeds direct mysql_query aanroept, mis je dat allemaal.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_63711701
Chandler, dan moet je dus wel specifiek zoeken naar een class die goede benchmarking info biedt. Niet iedere class is hier even sterk in. "Wie kent een database class?" komt neer op het zoeken naar een rode auto die binnen 8 seconden aan de 100 km/uur zit, en vervolgens bij een autohandelaar vragen of 'ie "een auto" te koop heeft staan

mysql_query() direct aanroepen, zijn er nog mensen die dat doen? Gebruikt nog niet iedereen (MVC-)frameworks en (ActiveRecord-achtige) database classes?
  woensdag 3 december 2008 @ 08:29:40 #161
84926 WyriHaximus
Release the hounds smithers!
pi_63716997
quote:
Op dinsdag 2 december 2008 22:58 schreef Roy_T het volgende:
Chandler, dan moet je dus wel specifiek zoeken naar een class die goede benchmarking info biedt. Niet iedere class is hier even sterk in. "Wie kent een database class?" komt neer op het zoeken naar een rode auto die binnen 8 seconden aan de 100 km/uur zit, en vervolgens bij een autohandelaar vragen of 'ie "een auto" te koop heeft staan

mysql_query() direct aanroepen, zijn er nog mensen die dat doen? Gebruikt nog niet iedereen (MVC-)frameworks en (ActiveRecord-achtige) database classes?
Zelfs als ik niet in cakephp bezig ben gebruik ik classes om me databases aan te roepen . Op 1 ding na doe ik het nooit direct .
phluphy for president!
pi_63719758
Mja dan moet ik maar mijn oude mysql class gaan verbeteren ook een optie.

-edit- probleem verholpen
gefixt door enter voor content type

[ Bericht 36% gewijzigd door Chandler op 03-12-2008 10:56:47 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_63720317
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<?php
error_reporting
(E_ALL);

class 
MySQL
{
    
// variables
    
var $db;
    var 
$query;
    var 
$queryres;
    var 
$data;
    
    
// statistics
    
var $query_cnt;
    var 
$fetch_cnt;
    var 
$insert_cnt;
    var 
$result_cnt;
    var 
$num_rows_cnt;
    var 
$affected_rows_cnt;

    function 
connect($user$pass$database$host 'localhost'$error 'Site kan geen verbinding maken met MySQL database in functie :: connect()')
    {
        
// Connectie leggen
        
$this->db mysql_connect($host,
                                  
$user,
                                  
$pass );

        
// Kijken of de connectie gelukt is, en of de database geselecteerd kon worden
        
if(!$this->db || !mysql_select_db($database,
                                          
$this->db))
        {
            
$this->m_error("DB Connect"mysql_error());
            die(
$error);
        }
    }
    
    function 
disconnect()
    {
        
// $res legen
        
if(!@mysql_free_result($this->queryres))
        {
            unset(
$this->queryres);
        }

        
// Verbinding sluiten
        
mysql_close($this->db);
    }

    function 
run_query($sql$noCache false)
    {
        if (
$noCache == true)
        {
            
mysql_query($sql,
                        
$this->db);

            
$this->query_cnt++;
        }
        else
        {
            
$this->query    $sql;
            
$this->queryres mysql_query($sql,
                                          
$this->db);
                                          
            
$this->query_cnt++;
        }

        if (!
$this->queryres && $noCache != true)
        {
            
$this->m_error($this->querymysql_error());
            die(
'Error in query: <br /><strong>Query:</strong> <hr>' $this->query '<hr><strong>MySQL error:</strong> ' mysql_error() . '<hr>');
        }
    }

    function 
num_rows($sql NULL)
    {
        if (
$sql != NULL)
        {
            
$this->query $sql;
            
$this->run_query($sql);
            
            
$this->num_rows_cnt++;

            return 
mysql_num_rows($this->queryres);
        }
        elseif (
$this->queryres && $this->query == $sql)
        {
            
$this->num_rows_cnt++;

            return 
mysql_num_rows($this->queryres);
        }
        elseif (
$this->query != $sql)
        {
            
$this->query $sql;
            
$this->run_query($sql);
            
            
$this->num_rows_cnt++;

            return 
mysql_num_rows($this->queryres);
        }
        else
        {
            
$this->m_error($this->querymysql_error());
            die(
'Geen query uitgevoerd voor functie :: num_rows()');
        }
    }
    
    function 
fetch_object($sql NULL)
    {
        if (
$this->queryres && $sql == NULL)
        {
            
$this->fetch_cnt++;

            return 
mysql_fetch_object($this->queryres);
        }
        elseif(
$sql != NULL)
        {
            
$this->query $sql;
            
$this->run_query($sql);
            
            
$this->fetch_cnt++;

            return 
mysql_fetch_object($this->queryres);
        }
        else
        {
            
$this->m_error($this->querymysql_error());
            die(
'geen query uitgevoerd voor functie :: fetch_object()');
        }
    }

    function 
insert_id($sql NULL)
    {
        
// Kijken of er een query meegegeven is, zo ja uitvoeren
        
if ($sql != NULL)
        {
            
$this->run_query($sql);
        }
        elseif (
$sql == NULL && !$this->queryres)
        {
            
$this->m_error($sqlmysql_error());
            die(
'Geen query uitgevoerd voor functie :: insert_id()');
        }
        
        
$this->insert_cnt++;

        
// Mysql_insert_id uitspugen
        
return mysql_insert_id($this->db);
    }

    function 
affected_rows($sql NULL)
    {
        
// Kijken of er een query meegegeven is, zo ja uitvoeren
        
if ($sql != NULL)
        {
            
$this->run_query($sql);
        }
        elseif (
$sql == NULL && !$this->queryres)
        {
            die(
'Geen query uitgevoerd voor functie :: affected_rows()');
        }
        
        
$this->affected_rows_cnt++;

        
// Mysql_insert_id uitspugen
        
return mysql_affected_rows($this->db);
    }
    
    function 
result($row 0$sql NULL$noCache false)
    {
        
// Kijken of er een query meegegeven is, zo ja uitvoeren
        
if ($sql != NULL)
        {
            if (
$noCache != false)
            {
                
$tmpres mysql_query($sql,
                                      
$this->db);

                
$this->query_cnt++;
            }
            else
            {
                
$this->run_query($sql);
            }
        }
        elseif (
$sql == NULL && !$this->queryres)
        {
            
$this->m_error($sqlmysql_error());
            die(
'Geen query uitgevoerd voor functie :: result()');
        }
        
        
$this->result_cnt++;

        
// Mysql_insert_id uitspugen
        
if ($noCache != false)
        {
            
$res = @mysql_result($tmpres$row);
        }
        else
        {
            
$res = @mysql_result($this->queryres$row);
        }
        
        if (
$res == null)
        {
            return 
"0";
        }
        else
        {
            return 
$res;
        }
    }

    function 
m_error($string$error)
    {
        
$buf "Error in MySQL\r\n
-----------------------\r\n
Query:
-----------------------\r\n" 
$string "\r\n
-----------------------\r\n
Error:
-----------------------\r\n" 
$error "\r\n
-----------------------\r\n"
;

        
$fd fopen("mysql_error.txt""w+");
        
fputs($fd$buf);
        
fclose($fd);

    }
    
    function 
stats()
    {
        return array(
"queries"       => (($this->query_cnt == 0)         ? "0" $this->query_cnt),
                     
"fetch"         => (($this->fetch_cnt == 0)         ? "0" $this->fetch_cnt),
                     
"insert"        => (($this->insert_cnt == 0)        ? "0" $this->insert_cnt),
                     
"result"        => (($this->result_cnt == 0)        ? "0" $this->result_cnt),
                     
"num_rows"      => (($this->num_rows_cnt == 0)      ? "0" $this->num_rows_cnt),
                     
"affected_rows" => (($this->affected_rows_cnt == 0) ? "0" $this->affected_rows_cnt));
    }
}
?>


dit is trouwens mijn oude database class, hebben jullie nog ideeen om dit te verbeteren? hoef geen code voorbeelden maar meer, doe hier wat mee of gebruik dit eens ;)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 3 december 2008 @ 11:52:23 #164
159635 Spike1506
NullPointerException
pi_63721577
@Chandler Gebruik ipv var $var eens, private/proteced/public $var's enz.
  woensdag 3 december 2008 @ 12:03:27 #165
84926 WyriHaximus
Release the hounds smithers!
pi_63721930
quote:
Op woensdag 3 december 2008 11:52 schreef Spike1506 het volgende:
@Chandler Gebruik ipv var $var eens, private/proteced/public $var's enz.
Zelfde geld voor de functies .
phluphy for president!
pi_63725023
Stel, ik heb een aantal waarden die met komma's gescheiden zijn. Er kunnen ook strings bij zitten, die hebben dan aanhalingstekens eromheen. Bijvoorbeeld:

1,87932,'hoi, dit is een test','It\'s backslash (\\)',328,0

Nu wil ik die waarden van elkaar scheiden. Daarvoor heb ik de volgende functie gemaakt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function customexplode($invoer) { 
    
$uitnr=0;
    
$startpos=0;
    do {
        
preg_match('/[^\',][^,\']*|\'([^\'\\\\]|\\\\.)*\'/'substr($invoer$startpos), $matchesPREG_OFFSET_CAPTURE);
        if (
count($matches)>0) {
            
$t $matches[0][0];
            if (
substr($t,0,1)=="'"$t=substr($t,1,strlen($t)-2);
            
$uitvoer[$uitnr]=$t;
            
$startpos += $matches[0][1] + strlen($matches[0][0]);
            
$uitnr++;
        }
    } while (
count($matches)>0);
    return 
$uitvoer;
}
?>

Maar als ik die nu loslaat op een regel waarin een van de stukjes tekst tientallen kb's groot is, dan crasht PHP. Ik heb inmiddels begrepen dat dat met recursie in PCRE te maken heeft. Ik zit dus met de volgende vragen:
- Kan ik de maximale recursiediepte nu beperken naar een veilige waarde, of werkt de reguliere expressie dan niet meer goed?
- Kan je de reguliere expressie ook beter formuleren?
pi_63725659
quote:
Op woensdag 3 december 2008 11:52 schreef Spike1506 het volgende:
@Chandler Gebruik ipv var $var eens, private/proteced/public $var's enz.
Mag ik vragen waarom? scheelt dit in preformance?
quote:
Op woensdag 3 december 2008 12:03 schreef WyriHaximus het volgende:
Zelfde geld voor de functies ;).
Zelfde vraag ;)

Nu een andere vraag (ja ik heb bergen met vragen);

Ik heb een tabel waar ik referers van gebruikers in opsla
1
2
3
4
5
6
7
8
CREATE TABLE `stats_ip_referers` (
  `stat_id` int(10) unsigned NOT NULL,
  `ip_id` int(10) unsigned NOT NULL,
  `referer_id` int(10) unsigned NOT NULL,
  `hits` int(10) unsigned NOT NULL,
  `lastdate` timestamp NULL default NULL,
  UNIQUE KEY `stat_id_2` (`stat_id`,`ip_id`,`referer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Nu heb ik reeds 115K aan referers in deze tabel staan maar wil graag filteren wat de EXIT pagina's zijn (dus de laatste pagina waarop de gebruiker heeft gezeten). Hoe kan ik dit het beste aanpakken? heb er zelf al 2 uur mee zitten spelen maar het wil gewoon domweg niet lukken :(
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 3 december 2008 @ 16:31:58 #168
159635 Spike1506
NullPointerException
pi_63728299
quote:
Op woensdag 3 december 2008 14:37 schreef Chandler het volgende:

[..]

Mag ik vragen waarom? scheelt dit in preformance?
[..]

Zelfde vraag
Het heeft o.a te maken met de toegankelijkheid van deze variablen/functies. Zie ook: Visibility @ PHP.net.
Ik zou ook kijken naar dingen als __construct en __destruct, dze kunnen ook erg handig zijn voor je classes.
  woensdag 3 december 2008 @ 17:38:21 #169
85514 ralfie
!Yvan eht nioj
pi_63729973
quote:
Op woensdag 3 december 2008 14:08 schreef Igen het volgende:
Stel, ik heb een aantal waarden die met komma's gescheiden zijn. Er kunnen ook strings bij zitten, die hebben dan aanhalingstekens eromheen. Bijvoorbeeld:

1,87932,'hoi, dit is een test','It\'s backslash (\\)',328,0

Nu wil ik die waarden van elkaar scheiden. Daarvoor heb ik de volgende functie gemaakt:
[ code verwijderd ]

Maar als ik die nu loslaat op een regel waarin een van de stukjes tekst tientallen kb's groot is, dan crasht PHP. Ik heb inmiddels begrepen dat dat met recursie in PCRE te maken heeft. Ik zit dus met de volgende vragen:
- Kan ik de maximale recursiediepte nu beperken naar een veilige waarde, of werkt de reguliere expressie dan niet meer goed?
- Kan je de reguliere expressie ook beter formuleren?
dit zou ik niet met regex doen zeker bij grotere hoeveelheden data.

Smerige oplossing
1
2
3
4
5
6
7
8
<?php
function customexplode($invoer)
{
    
$return = array();
    eval(
'$return = array(' $invoer ');');
    return 
$return;
}
?>


Mooiere oplossing (ook zonder regex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function customexplode($invoer)
{
    
$currentstring='';
    
$result = array();
    foreach( 
explode(','$invoer) as $token)
    {
        if (
$token{0} == '\'' || $currentstring != '')
        {
            
$currentstring .= ',' $token;
            if (
substr($currentstring, -1) == '\'' && substr($currentstring,-2) !='\\\'' )
            {
                
$result[] = substr($currentstring2, -1);
                
$currentstring='';
            }
        }
        else 
$result[]=$token;
    }
    if (
$currentstring !=''$result[]=substr($currentstring,2,-1);
    return 
$result;
}
?>

(niet getest overigens, maar zou zo volgens mij wel moeten werken)
pi_63737710
quote:
Op woensdag 3 december 2008 14:08 schreef Igen het volgende:
Stel, ik heb een aantal waarden die met komma's gescheiden zijn. Er kunnen ook strings bij zitten, die hebben dan aanhalingstekens eromheen. Bijvoorbeeld:

1,87932,'hoi, dit is een test','It\'s backslash (\\)',328,0

Nu wil ik die waarden van elkaar scheiden.
Waarom gebruik je niet de native CSV parse functies in PHP? fgetcsv() bijvoorbeeld.
pi_63741586
quote:
Op woensdag 3 december 2008 17:38 schreef ralfie het volgende:

[..]

Mooiere oplossing (ook zonder regex)
[ code verwijderd ]

(niet getest overigens, maar zou zo volgens mij wel moeten werken)
Ik gok dat die functie zich verslikt in iets als 123,'hoi\\',456.
Maar wel een goed idee om eerst met explode() te splitsen en dan weer te gaan samenvoegen! Bedankt!

Edit: Bij nader inzien weet je toch nooit zeker hoe veel backslashes overal staan, en je moet dus toch teken voor teken werken. Dat zie je ook op de php website bij de voorbeelden voor parse_csv functies. En daarvoor had ik al een functie, die echter veel langzamer was dan die met een reguliere expressie.
En zo ben ik weer bijna terug bij af. Behalve dat ik ondertussel wél een klein foutje heb kunnen oplossen in mijn parser. Iets met = en ==

[ Bericht 15% gewijzigd door #ANONIEM op 03-12-2008 23:46:10 ]
pi_63741603
quote:
Op woensdag 3 december 2008 21:42 schreef Roy_T het volgende:

[..]

Waarom gebruik je niet de native CSV parse functies in PHP? fgetcsv() bijvoorbeeld.
Omdat fgetcsv() alleen op bestanden werkt, en str_getcsv() nog niet in een stabiele versie van PHP beschikbaar is.
pi_63753036
Ik heb een sidebarretje gemaakt waarin agendapunten komen te staan. Nou wil ik daar steeds de tekst van aan passen, maar dan moet ik steeds weer in de broncode gaan prutsen. Is hier niet een andere oplossing voor? Dat ik in een formuliertje alles kan invullen ofzo?

Iemand aanbevelingen ?
pi_63755408
quote:
Op donderdag 4 december 2008 13:11 schreef hello_moto1992 het volgende:
Iemand aanbevelingen ?
Je zou het in PHP kunnen bakken
  donderdag 4 december 2008 @ 16:16:07 #175
187069 slacker_nl
Sicko pur sang
pi_63758311
Voor csv, zoek eens op pear, wellicht dat daar leuke parsers tussen zitten. Overigens, Perl kent een uitstekende CSV parser (maar weet niet of je perl wilt/kan proggen).

Deze bedoelde ik dus: http://pear.php.net/package/File_CSV
In theory there is no difference between theory and practice. In practice there is.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')