Jump to content
php.lv forumi

query error :D


ViszinisA

Recommended Posts

while (!feof($fails))
{
 $pk = fgets($fails,1024);
 $query = 'INSERT INTO `vote_skoleni_pk` (`id`, `pk`, `class`, `voted`) VALUES (LAST_INSERT_ID(),\''.$pk.'\', \'14\', \'no\');';
 $result = mysql_query($query);
 if (!$result) 
{
  die('Invalid query: ' . mysql_error());
}
}

 

tipaz kods nolasa cilveecinju personas kodus no faila un tik mauc DB

 

 

pirmo ierakstu shis ieraksta...

a kad gatavojas rakstiit otru...

tad error...

Invalid query: Duplicate entry '1' for key 1

 

apgaismojiet mani luudzu :D

Link to comment
Share on other sites

Paskaties pats - tu mēģini katram jaunajam ierakstam pielikt tādu pašu ID, kā pēdējam ievietotajam ierakstam.

 

Ņem to ID no INSERT kverija vispār ārā, bet tabulas id kolumnai pievieno UNIQUE vērtību un AUTO_INCREMENT. Nu kaut kā tā. Ja izmanto phpmyadmin, tad sapratīsi ātri.

Link to comment
Share on other sites

es arī nesaprotu šādu cilvēku vēlēšanas lai visi numuri būtu pēc kārtas... tas pats VID-am,.. stingrās uzskaites numuri. Baigais čakars - jāveic numuru anulēšanu un debīli reporti

 

Var jau protams uztaisīt mehānismu, kurš aizpilda "tukšumus", bet vai vajag..

Link to comment
Share on other sites

ID ir UNIKĀLS identifikators un tā tam vajadzētu būt, savādāk sanāks tā, ka vienu dienu pēc ID = 3 atradīsi vienu ierakstu, nākamajā dienā kaut ko citu, jo, redz, kāds būs veco ierakstu ar ID = 3 izdzēsis un tā vietā tavs mega tukšumu aizpildošais algoritms būs ielicis iekšā kaut ko citu.

 

Ja Tev DB ir viena tabula un paša vajadzībām, tad tā var darīt, ja DB ir 100 tabulas un ir atsauce uz konkrēto ID vēl 15 tabulās, tad tāds piegājiens pie pirmās izdevības pilnībā nograus visu sistēmu

Link to comment
Share on other sites

litt, tu esi mācījies `datu integritāti`?... zini par tādiem relations, trigeri?.. ja tu dzēs ierakstu vienā tabulā, tad jādzēš vai jāmaina ID/ref citās saistītitās tabulās (DROP CASCADE, SET NULL).

 

Var arī šādi, kā viens no perversijas variantiem.

onDelete()
{
ManaTabula.ID = - ManaTabula.ID;
ManaTabula.update();
}

 

un selektēt tikai ID > 0.

 

A vispār nopietnās sistēmās nedzēš datus, bet marķē ar kolonnu "Delete" vai pārnes citā tabulā. Tiek veikts kārtīgs TransactionLog.

Link to comment
Share on other sites

×
×
  • Create New...