Cum să nu puneți baza de date MySQL utilizând căutarea de atribute în WebAsyst ShopScript
Bună ziua, dragi cititori ai blogului meu!
Prin numeroasele cereri pe forumul WebAsyst'a, scriu această intrare. Nu este nimic complicat sau neobișnuit în acest articol, dar, totuși, grație acestui hack, puteți evita "fixarea" bazei dvs. de date MySQL.
Deci, să începem. Deschideți fișierul:
C: \ WebServers \ home \ domeniu \ www \ publicate \ SC \ html \ scripts \ core_functions \ product_functions.php
Pe linia 507 vedem deschiderea unei buclă care rulează toate elementele și pe 517 vedem că de fiecare dată când un nou LEFT JOIN este adăugat la matricea $ sqls_joins, care în realitate încarcă baza noastră de date. De exemplu, pot spune că, cu un test pe serverul local, interogarea care are 1x LEFT JOIN a făcut 0,002 secunde. în timp ce 2xLEFT JOIN a luat 8,8 secunde. (o eroare a datelor este posibilă, pentru că scriu o săptămână după test :), pot spune un lucru, că diferența dintre timp a fost de 500 de ori).
La fiecare trecere a ciclului nostru se alăture una și aceeași masă cu un nume diferit, care este pur și simplu incrementată!
Acest lucru se întâmplă pe linia 519:
Astfel, dacă specificăm o mulțime de atribute atunci când căutăm, atunci baza noastră de date se va culca și va minți.
Pentru a evita un astfel de incident, am introdus un banal și poate nu chiar frumos, în ceea ce privește regulile de bună formă în programare, schimbări.
Trebuie doar să ștergeți toate referințele la variabila $ cnt și să modificați liniile 519 și 543 astfel încât elementul matricei să nu fie creat, ci suprascris. În acest fel, eliminăm conexiunile suplimentare ale tabelelor din interogare.
Poate că cea mai bună soluție ar fi eliminarea acestei intrări din ciclu, dar datorită faptului că inițial nu este clar de ce este nevoie de această "cârjă", m-am limitat la schimbări minore.
Optimizarea codului de succes! 🙂