⊗ppSpOtSQ 80 of 83 menu

Оптимизација употребе SQL упита у PHP

Извршавање SQL упита ка бази података је веома спора операција. Зато треба тежити да се минимизира број упита ка бази.

Најчешћа грешка је извршавање множества SQL упита у петљи, при томе, да постоје алтернативни упити који омогућавају да се жељено изврши једном командом.

Погледајмо на примеру.

Нека нам је дат низ са id записима у бази података и потребно је да обришемо записе са тим id.

Не размишљајући дуго, може се написати оваква "дивна" конструкција:

<?php $ids = [1, 2, 3, 4, 5]; // низ за брисање foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Проблем овог кода је у томе што се у петљи извршава множество упита. Замислите да у низу буде 100 елемената - извршиће се 100 упита ка бази!

Посебна замка описане задаче је у томе што при развоју сајта база података је мала и упити се извршавају веома брзо. Међутим, како сајт ради на хостингу, база ће расти, упити ће се извршавати све спорије, и може доћи до тога да ће се, због извршавања стотине упита у петљи, сајт учитавати преко минута!

Уложивши врло мало напора, може се урадити тако да се изврши само један упит, овако:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // добијамо стринг '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Оптимизујте доњи код:

<?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); ?>
Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј