Avaleht
uus teema   vasta Tarkvara »  WWW »  Maksimaalne turvalisus PHP+MySQL märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele eelmine  1, 2
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
andresv
HV kasutaja

liitunud: 06.12.2004



Autoriseeritud ID-kaardiga

sõnum 06.04.2009 12:15:05 vasta tsitaadiga

nene kirjutas:
andresv kirjutas:
miks mitte kasutada parameetrite "bind"-imist?

http://ee.php.net/manual/en/mysqli-stmt.bind-param.php


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
vaata kasutaja infot saada privaatsõnum
jnt
HV Guru
jnt

liitunud: 10.05.2005



Autoriseeritud ID-kaardiga

sõnum 30.04.2009 09:20:05 vasta tsitaadiga

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... icon_razz.gif

(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. icon_wink.gif
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
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  Maksimaalne turvalisus PHP+MySQL mine lehele eelmine  1, 2
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.