praegune kellaaeg 19.06.2025 00:40:01
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
andresv
HV kasutaja
liitunud: 06.12.2004
|
06.04.2009 12:15:05
|
|
|
nene kirjutas: |
Ma pean ütlema, et see MySQLi parameetrite bindimise värk on üks haigemaid API-sid mis ma näinud olen. Kõigepealt bindid mingid muutujad, ning hiljem nende muutujate väärtusi muutes muutuvad maagiliselt ka päringu parameetrite väärtused.
|
Njah, aga sama loogika on ka oracle-ga suhtlemisel
oci_bind_by_name
Seega vaevalt on see PHP väljamõeldis vaid pigem mingi üldine põhimõte, kuna ju allolev C API peab ka seda ju toetama.
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
30.04.2009 09:20:05
|
|
|
Tulles muidu (omamoodi) tagasi sql päringu parsimise juurde, siis sai uuritud veidi, kui kaua aega mingile asjale kulub. Avastasin, et explode'iga on asi ~5-10% kiirem, kui lihtsalt mööda stringi täht haaval edasi joosta. Koodid:
Vana:
for($a=0;$a<strlen($q);$a++){
if($q{$a}!='['){
$pq.=$q{$a};
}else{
$nrlength=1;
$nr='';
while($q{$a+$nrlength}!=':' && $q{$a+$nrlength}!=']'){
$nr.=$q{$a+$nrlength};
$nrlength+=1;
}
if($q{$a+$nrlength}!=':'){
$pq.=trim($args[$nr+1]);
$a+=$nrlength;
}else{
switch($q{$a+$nrlength+1}){
case 'i': $pq.=intval(trim($args[$nr+1])); break;
case 'f': $pq.=floatval(trim($args[$nr+1])); break;
case 's': $pq.="'".trim($args[$nr+1])."'"; break;
}
$a+=$nrlength+2;
}
}
} |
Uus:
$e1=explode(']', $q);
for($a=0;$a<count($e1);$a++){
$e2=explode('[', $e1[$a]);
$pq.=$e2[0];
if($e2[1]!=''){
$param=explode(':', $e2[1]);
switch($param[1]){
case 'i': $pq.=intval(trim($args[$param[0]+1])); break;
case 'f': $pq.=floatval(trim($args[$param[0]+1])); break;
case 's': $pq.="'".trim($args[$param[0]+1])."'"; break;
default: $pq.=trim($args[$param[0]+1]);
}
}
} |
Uuem siis, nagu mainitud, oli ligi 5-10% kiirem. Testsisendid:
$q='asd [0:i] [1:s] asd [2] [3] [4:f] [5:s] end';
$args[1]=234;
$args[2]='asdas';
$args[3]='asf';
$args[4]=478;
$args[5]=3447.136;
$args[6]='fjtr'; |
Mõlemat skripti sai jooksutatud 60000 korda vähe vanema masina peal. (P3 866MHz) Tulemus oli siis umbes 12s vs. 13s.
Sai proovitud ja preg_split'i, et uuemas versioonis asendada 2 explode'i ühe preg_split'iga, kuid see jäi ka vanemast versioonist ~1-2s maha.
Et selline lugu veel juurde...
(mysql_real_escape_string puudub hetkel, kuna tähtis oli kiiruse mõõtmine ja too funktsioon töötab vaid siis, kui mysql serveriga on ühendus loodud)
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|