Jump to content
php.lv forumi

ģenērē skaitli, kamēr veiksmīgs kverijs


mach1ne^

Recommended Posts

Labvakar.

Tātad ir ieraksti (ID), piemēram, no 1. līdz 10000. Vajadzētu, lai ģenerē skaitli no 1. līdz tam 10000. un tiek izvilkts ieraksts. Nasing spešl, bet ir viens knifs, ka kāds (ID) varētu būt izdzēsts, tad vajadzētu, lai ģenerē pa jaunu. Tobiš ģenerē tik ilgi, kamēr ir veiksmīgs kverijs. Varētu palīdzēt? Vakarā nu galva galīgi nedomājas. :)

Edited by mach1ne^
Link to comment
Share on other sites

Vajag, lai katru reizi ģenerē citu skaitli, lai katru reizi sanāk izvilkt citus datus.

No 1. līdz 10000. var iztrūkt jebkurš skaitlis. Man nevajag atrast iztrūkstošo ID, bet gan izvilkt kveriju, select * from kkas where id="randomnumber", kurā randomnumber ir intervālā no 1. līdz 10000 un, ja kverijam ir nulle rezultātu, viņš šamo atkārto, kamēr iegūst vismaz vienu rezultātu.

Edited by mach1ne^
Link to comment
Share on other sites

do{
$i = rand(1,1000);
$data = mysql_query("SELECT * FROM table WHERE id = '$i'");
}while(!mysql_num_rows($data));

 

Šitais nav diez ko labs, ja Tev tur ļoti daudz kas iztrūkst starp 1 un 1000, būs daudz lieku kvēriju :))

Edited by briedis
Link to comment
Share on other sites

Šitādi mums laikam ir tie "programmētāji"? Pats saproti ko tur uzrakstīji? SQL injekciju kodā - datubāzes bombardēšanu ar pieprasījumiem! :D

 

Pats tu baigais programmētājs - kur tu redzi kādu SQL INJEKCIJU? :)

 

Tātad, rekur neliels risinājums :) ->

 

$i = rand(1,1000);
$data = mysql_query("SELECT * FROM table WHERE id >= '$i' LIMIT 1");
if(!mysql_num_rows($data){
 $data = mysql_query("SELECT * FROM table WHERE id < '$i' LIMIT 1");
}

Edited by briedis
Link to comment
Share on other sites

A kas jums nepatiik buubu dotajaa varjantaa??

Vienieega nelaime ka biskjin iebremzes ja buus Ultra daudz datu ( paris M )

Reali panjems visus tabulu un atgrieziis vienu Random rezultatu..

 

Bet shis ir labaks ( un krietni atraks ) varjants nekaa njemt un veikt N-tos pieprasijumus ( no 1 liidz pat iztruktosho_id_skaits +1 )

( Taatad , ja buus 10 M ierakstu un buus 10 M dzestu ID tad maksimalais iespejamais pieprasijumu skaits var sasniegt 10M +1 )

 

edit: uj nee.. max iespejamais skaits nav ierobezots, jo nekur netiek saglabats vai saads randoms jau nav izmantots...

tatad , reali var n-tas reizes tik veikts viens un tas pats pieprasijums ...

Faktiski Programamas Max izpildes laiks ierobezojas vienigi ar PHP.ini noteikto, ja taada nav tad tas tiecas uz bezgaliibu ...

 

Edit 2: briedis dotajaa kodaa vispar var izveidoties situacija 'Muziigais cikls'

Piem:

teiksim iz izdzesti pirmie 600 ID

pirmoreiz uzgeneree $i=500

Nakamreiz ciklaa mekle no 1-499, kur protams Nav neviena ieraksta ..

sekas --> muzigais cikls..

---

Edited by Grey_Wolf
Link to comment
Share on other sites

Hmm... Un kurā vietā tur rodas injekcija?

 

"Datubāzes bombardēšana ar pieprasījumiem" - tak biju paskaidrojis, kuru vārdu nesaprati? Ja datubāzes attiecīgajā tabulā nav neviens ID, kurš būtu no robežās no 1 līdz 1000, tā ir bombardēšana ar pieprasījumiem bezgalīgā ciklā! Vai arī varbūt "injekcija" bija šis tavs "neizpratnes pilnais" ziņojums?

Link to comment
Share on other sites

Kopš kuriem laikiem tas saucas "SQL injekcija"? SQL injekcija pēc definīcijas ir lietotāja (tā, kurš lieto webbrowseri vai citu softa interfeisu) inputa datu iebarošana SQL kverijā neeskeipotā veidā.

Pirmo reizi dzirdu, ka datubāzes noslogošanu būtu jāsauc par SQL injekciju.

Palasi kautvai wikipēdijā, kas ir SQL injekcija: http://en.wikipedia.org/wiki/SQL_injection

Link to comment
Share on other sites

Tātad, rekur neliels risinājums :) ->

 

$i = rand(1,1000);
$data = mysql_query("SELECT * FROM table WHERE id >= '$i' LIMIT 1");
if(!mysql_num_rows($data){
 $data = mysql_query("SELECT * FROM table WHERE id < '$i' LIMIT 1");
}

 

"Risinājums" ir ārkārtīgi dīvains! Kāda loģika tev vispirms skatīties id >= '$i' un pēc tam, ja neatrod skatīties id < '$i' - ar ko pirmajam salīdzinājumam ir priekšrocība pret otro? Tas ir viens. Otrs - tēmas autors tak prasīja, lai meklē pēc konkrēta ID, nevis kaut kādu tuvākā meklēšanas - pie tam pat šādā gadījumā pieprasījumos ir kļūda, jo vajag "order by" arī pielikt...

Link to comment
Share on other sites

Kopš kuriem laikiem tas saucas "SQL injekcija"? SQL injekcija pēc definīcijas ir lietotāja (tā, kurš lieto webbrowseri vai citu softa interfeisu) inputa datu iebarošana SQL kverijā neeskeipotā veidā.

Pirmo reizi dzirdu, ka datubāzes noslogošanu būtu jāsauc par SQL injekciju.

Palasi kautvai wikipēdijā, kas ir SQL injekcija: http://en.wikipedia.org/wiki/SQL_injection

 

Neesmu db speciālists, tāpēc neiedziļinājos terminos, bet doma bija skaidra, ko es ar to domāju, jo biju arī savu domu paskaidrojis skaidri un nepārprotami.

Link to comment
Share on other sites

Neesmu db speciālis

Tad varbūt nekomentē lietas, kuras nesaproti?

 

Un nē - doma nebija skaidra. Neviens tevi pareizi nesaprata, secinājums nav acīmredzams?

Ja tu teiksi, es gribu ēst oranžo ābolu, neviens tevi arī nesapratīs, kaut tu arī domāji ēst apelsīnu, jo tas taču ir oranžs. Ja lietosi nepareizus terminus, tevi neviens nesapratīs.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...