Jump to content
php.lv forumi

Kā lai noskaidro kāds id tika izveidots?


AndzX8-842

Recommended Posts

mysql_query("INSERT INTO tabula $a");

 

Pirmajai tabulai, teiksim, ir divi lauki, viens kurā ir atrodams $a un otrs ID.

Otrajā tabulā ir citi dati, tās pašas id un pirmās tabulas ID(pID) citā kolonnā.

 

Kā lai noskaidro kāds ID tika izveidots uzreiz, scripta darbības laikā, kad query ir pabeigts? Jo, piemēram, to ID vajadzētu ar vēl viena mysql_query palīdzību ielikt vēl arī otrā tabulā, kur tas kalpotu kā atskaites punkts.

 

Viena ideja būtu dabūt pēdējā ieraksta ID + 1, kas arī būtu tiko ievadītās informācijas tabulas rindas id, ko izveidotu mysql. Bet tālāk ir sekojošā problēma -- pieņemsim, ka divi cilvēki viens pēc otra atver ievadformu un otrais to atver tad, kad pirmais vēl nav aizvēris, tātad abi saņemtu vienu un to pašu tabulas pēdējās rindas ID. Rezultāks, otrajā tabulā, kur jāievada pirmās tabulas jaunizveidotais ID būs divas rindas ar vienādu pID. Viens atrisinājums varētu būt, ka ID netiek izsniegts formu atverot, ka tas vispār nekur netiek izsniegts un nefigurē formā kā hidden lauks, bet gan tiek noskaidrots tieši tad, kad informācija tiek ievadīta, bet tas tomēr arī nav 100% droši, ja nu vēl nāktu klāt kādi citi labumi pēcāk.

 

Ja ir grūti saprast, ko gribēju pateikt ar pēdējo rindkopu, tad to var arī izlaist, jautājums jau paliek tas pats. Pilnīgi iespējams, ka šito var viegli atrisināt, bet kaut kā pagaidām atrisinājums vēl neiešaujas prātā vai arī pēdējā rindkopā uzrakstītais ir vienīgais veids, kā noteikt ID, kuru izveidoja query?

Link to comment
Share on other sites

Tak elementāri. Pirmajā tabulā id laukam liec AUTO_INCREMENT, kad esi tur ielicis rindu, izsauc mysql_insert_id(), kurš atgriež to piešķirto id. Un tālāk dari, ko gribi - liec nākamās formas hidden laukā vai saglabā sesijā. Jebkuram citam userim viņš būs savs.

Link to comment
Share on other sites

  • 1 month later...
mysql_query("INSERT INTO tabula $a");

 

Pirmajai tabulai, teiksim, ir divi lauki, viens kurā ir atrodams $a un otrs ID.

 

Ja lauks ir auto-increment, vari gan izmantot PHP funkciju last_insert_id vai arii caur SQL "select last_insert_id".

Nu tipa kaut kaa taa.

Link to comment
Share on other sites

Ja lauks ir auto-increment, vari gan izmantot PHP funkciju last_insert_id vai arii caur SQL "select last_insert_id".

Tas nebuut nav viens un tas pats ;)

Ar PHP dabuusi peedeejo ID ko buus ievadiijis konkretais lietotaajs (viss buus korekti)

ar SQL pieprasijumu dabuusi vispaar peedeejo ID --> kas nebuut nenoziimee ka to buus izveidojis konkretais useris.... (ja datus updeitos 2 vai vairaak lietoataaji vienlaiciigi, liels % ka viss aizies skjeersaam)

Link to comment
Share on other sites

ar SQL pieprasijumu dabuusi vispaar peedeejo ID --> kas nebuut nenoziimee ka to buus izveidojis konkretais useris....

Nav taisnība. http://dev.mysql.com/doc/refman/5.0/en/inf....html#id3184877

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.

php (vai mysql klienta) sources neesmu skatījies, taču imo, php fja jau sev apakšā izmanto to pašu vien SQL fju. Jaunu divriteni taču neizgudrosi.

Link to comment
Share on other sites

×
×
  • Create New...