⊗ppSpOtSQ 80 of 83 menu

Optimizacija korišćenja SQL upita u PHP-u

Izvršavanje SQL upita ka bazi podataka je veoma spora operacija. Zato je potrebno pokušati da se minimizira broj upita ka bazi.

Najčešća greška je izvršavanje velikog broja SQL upita u petlji, pri čemu postoje alternativni upiti koji omogućavaju da se željeno izvrši jednom komandom.

Pogledajmo na primeru.

Neka nam je dat niz sa id zapisa u bazi podataka i neophodno je da obrišemo zapise sa takvim id.

Bez dugog razmišljanja, može se napisati ovakva "izvrsna" konstrukcija:

<?php $ids = [1, 2, 3, 4, 5]; // niz za brisanje foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Problem ovog koda je što se u petlji izvršava veliki broj upita. Zamislite da u nizu bude 100 elemenata - izvršiće se 100 upita ka bazi!

Posebna zamka opisanog zadatka je u tome što prilikom razvoja sajta baza podataka je mala i upiti se izvršavaju veoma brzo. Međutim, kako sajt radi na hostingu, baza će rasti, upiti će se izvršavati sve sporije, i može doći do toga da će se zbog izvršavanja stotine upita u petlji sajt učitavati više od minut!

Uloživši vrlo malo truda, može se uraditi tako da se izvrši samo jedan upit, ovako:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // dobićemo string '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Optimizujte donji kod:

<?php $arr = [1, 2, 2, 4, 5]; $res = []; for ($i = 1; $i < count($arr); $i++) { $note = mysqli_query($link, "SELECT * FROM users WHERE id=$id"); for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row); $res[] = $data; } var_dump($res); ?>
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij